Skip to content

Commit 57016a0

Browse files
committed
Address review comments
1 parent db8c797 commit 57016a0

5 files changed

Lines changed: 38 additions & 60 deletions

File tree

codegen/src/main/java/software/amazon/awssdk/codegen/poet/auth/scheme/AuthSchemeInterceptorSpec.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -159,22 +159,6 @@ private MethodSpec generateBeforeExecution() {
159159
builder.addStatement("recordEnvironmentTokenBusinessMetric(selectedAuthScheme, "
160160
+ "executionAttributes)");
161161
}
162-
163-
if (authSchemeSpecUtils.hasSigV4aSupport()) {
164-
builder.beginControlFlow("if (selectedAuthScheme != null && "
165-
+ "selectedAuthScheme.authSchemeOption().schemeId().equals($T.SCHEME_ID) && "
166-
+ "!$T.isSignerOverridden(context.request(), executionAttributes))",
167-
AwsV4aAuthScheme.class,
168-
ClassName.get("software.amazon.awssdk.awscore.util", "SignerOverrideUtils"))
169-
.addStatement("$T businessMetrics = executionAttributes.getAttribute($T.BUSINESS_METRICS)",
170-
ClassName.get("software.amazon.awssdk.core.useragent", "BusinessMetricCollection"),
171-
SdkInternalExecutionAttribute.class)
172-
.beginControlFlow("if (businessMetrics != null)")
173-
.addStatement("businessMetrics.addMetric($T.SIGV4A_SIGNING.value())",
174-
BusinessMetricFeatureId.class)
175-
.endControlFlow()
176-
.endControlFlow();
177-
}
178162
return builder.build();
179163
}
180164

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/ops-auth-sigv4a-value-auth-scheme-interceptor.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import software.amazon.awssdk.annotations.Generated;
1111
import software.amazon.awssdk.annotations.SdkInternalApi;
1212
import software.amazon.awssdk.awscore.AwsExecutionAttribute;
13-
import software.amazon.awssdk.awscore.util.SignerOverrideUtils;
1413
import software.amazon.awssdk.core.SdkRequest;
1514
import software.amazon.awssdk.core.SelectedAuthScheme;
1615
import software.amazon.awssdk.core.exception.SdkException;
@@ -21,9 +20,6 @@
2120
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
2221
import software.amazon.awssdk.core.internal.util.MetricUtils;
2322
import software.amazon.awssdk.core.metrics.CoreMetric;
24-
import software.amazon.awssdk.core.useragent.BusinessMetricCollection;
25-
import software.amazon.awssdk.core.useragent.BusinessMetricFeatureId;
26-
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4aAuthScheme;
2723
import software.amazon.awssdk.http.auth.aws.signer.RegionSet;
2824
import software.amazon.awssdk.http.auth.spi.scheme.AuthScheme;
2925
import software.amazon.awssdk.http.auth.spi.scheme.AuthSchemeOption;
@@ -53,14 +49,6 @@ public void beforeExecution(Context.BeforeExecution context, ExecutionAttributes
5349
List<AuthSchemeOption> authOptions = resolveAuthOptions(context, executionAttributes);
5450
SelectedAuthScheme<? extends Identity> selectedAuthScheme = selectAuthScheme(authOptions, executionAttributes);
5551
putSelectedAuthScheme(executionAttributes, selectedAuthScheme);
56-
if (selectedAuthScheme != null && selectedAuthScheme.authSchemeOption().schemeId().equals(AwsV4aAuthScheme.SCHEME_ID)
57-
&& !SignerOverrideUtils.isSignerOverridden(context.request(), executionAttributes)) {
58-
BusinessMetricCollection businessMetrics = executionAttributes
59-
.getAttribute(SdkInternalExecutionAttribute.BUSINESS_METRICS);
60-
if (businessMetrics != null) {
61-
businessMetrics.addMetric(BusinessMetricFeatureId.SIGV4A_SIGNING.value());
62-
}
63-
}
6452
}
6553

6654
private List<AuthSchemeOption> resolveAuthOptions(Context.BeforeExecution context, ExecutionAttributes executionAttributes) {

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-with-allowlist-auth-scheme-interceptor.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import software.amazon.awssdk.annotations.Generated;
1111
import software.amazon.awssdk.annotations.SdkInternalApi;
1212
import software.amazon.awssdk.awscore.AwsExecutionAttribute;
13-
import software.amazon.awssdk.awscore.util.SignerOverrideUtils;
1413
import software.amazon.awssdk.core.SdkRequest;
1514
import software.amazon.awssdk.core.SelectedAuthScheme;
1615
import software.amazon.awssdk.core.exception.SdkException;
@@ -21,10 +20,7 @@
2120
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
2221
import software.amazon.awssdk.core.internal.util.MetricUtils;
2322
import software.amazon.awssdk.core.metrics.CoreMetric;
24-
import software.amazon.awssdk.core.useragent.BusinessMetricCollection;
25-
import software.amazon.awssdk.core.useragent.BusinessMetricFeatureId;
2623
import software.amazon.awssdk.endpoints.EndpointProvider;
27-
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4aAuthScheme;
2824
import software.amazon.awssdk.http.auth.aws.signer.RegionSet;
2925
import software.amazon.awssdk.http.auth.spi.scheme.AuthScheme;
3026
import software.amazon.awssdk.http.auth.spi.scheme.AuthSchemeOption;
@@ -56,14 +52,6 @@ public void beforeExecution(Context.BeforeExecution context, ExecutionAttributes
5652
List<AuthSchemeOption> authOptions = resolveAuthOptions(context, executionAttributes);
5753
SelectedAuthScheme<? extends Identity> selectedAuthScheme = selectAuthScheme(authOptions, executionAttributes);
5854
putSelectedAuthScheme(executionAttributes, selectedAuthScheme);
59-
if (selectedAuthScheme != null && selectedAuthScheme.authSchemeOption().schemeId().equals(AwsV4aAuthScheme.SCHEME_ID)
60-
&& !SignerOverrideUtils.isSignerOverridden(context.request(), executionAttributes)) {
61-
BusinessMetricCollection businessMetrics = executionAttributes
62-
.getAttribute(SdkInternalExecutionAttribute.BUSINESS_METRICS);
63-
if (businessMetrics != null) {
64-
businessMetrics.addMetric(BusinessMetricFeatureId.SIGV4A_SIGNING.value());
65-
}
66-
}
6755
}
6856

6957
private List<AuthSchemeOption> resolveAuthOptions(Context.BeforeExecution context, ExecutionAttributes executionAttributes) {

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/auth/scheme/query-endpoint-auth-params-without-allowlist-auth-scheme-interceptor.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import software.amazon.awssdk.annotations.Generated;
1111
import software.amazon.awssdk.annotations.SdkInternalApi;
1212
import software.amazon.awssdk.awscore.AwsExecutionAttribute;
13-
import software.amazon.awssdk.awscore.util.SignerOverrideUtils;
1413
import software.amazon.awssdk.core.SdkRequest;
1514
import software.amazon.awssdk.core.SelectedAuthScheme;
1615
import software.amazon.awssdk.core.exception.SdkException;
@@ -21,10 +20,7 @@
2120
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
2221
import software.amazon.awssdk.core.internal.util.MetricUtils;
2322
import software.amazon.awssdk.core.metrics.CoreMetric;
24-
import software.amazon.awssdk.core.useragent.BusinessMetricCollection;
25-
import software.amazon.awssdk.core.useragent.BusinessMetricFeatureId;
2623
import software.amazon.awssdk.endpoints.EndpointProvider;
27-
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4aAuthScheme;
2824
import software.amazon.awssdk.http.auth.aws.signer.RegionSet;
2925
import software.amazon.awssdk.http.auth.spi.scheme.AuthScheme;
3026
import software.amazon.awssdk.http.auth.spi.scheme.AuthSchemeOption;
@@ -56,14 +52,6 @@ public void beforeExecution(Context.BeforeExecution context, ExecutionAttributes
5652
List<AuthSchemeOption> authOptions = resolveAuthOptions(context, executionAttributes);
5753
SelectedAuthScheme<? extends Identity> selectedAuthScheme = selectAuthScheme(authOptions, executionAttributes);
5854
putSelectedAuthScheme(executionAttributes, selectedAuthScheme);
59-
if (selectedAuthScheme != null && selectedAuthScheme.authSchemeOption().schemeId().equals(AwsV4aAuthScheme.SCHEME_ID)
60-
&& !SignerOverrideUtils.isSignerOverridden(context.request(), executionAttributes)) {
61-
BusinessMetricCollection businessMetrics = executionAttributes
62-
.getAttribute(SdkInternalExecutionAttribute.BUSINESS_METRICS);
63-
if (businessMetrics != null) {
64-
businessMetrics.addMetric(BusinessMetricFeatureId.SIGV4A_SIGNING.value());
65-
}
66-
}
6755
}
6856

6957
private List<AuthSchemeOption> resolveAuthOptions(Context.BeforeExecution context, ExecutionAttributes executionAttributes) {

core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/http/pipeline/stages/ApplyUserAgentStage.java

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,23 @@
2828
import java.util.Optional;
2929
import software.amazon.awssdk.annotations.SdkInternalApi;
3030
import software.amazon.awssdk.core.ApiName;
31+
import software.amazon.awssdk.core.RequestOverrideConfiguration;
32+
import software.amazon.awssdk.core.SelectedAuthScheme;
3133
import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption;
3234
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
3335
import software.amazon.awssdk.core.client.config.SdkClientOption;
3436
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
37+
import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute;
3538
import software.amazon.awssdk.core.interceptor.SdkInternalExecutionAttribute;
3639
import software.amazon.awssdk.core.internal.http.HttpClientDependencies;
3740
import software.amazon.awssdk.core.internal.http.RequestExecutionContext;
3841
import software.amazon.awssdk.core.internal.http.pipeline.MutableRequestToRequestPipeline;
42+
import software.amazon.awssdk.core.signer.Signer;
3943
import software.amazon.awssdk.core.useragent.AdditionalMetadata;
4044
import software.amazon.awssdk.core.useragent.BusinessMetricCollection;
45+
import software.amazon.awssdk.core.useragent.BusinessMetricFeatureId;
4146
import software.amazon.awssdk.http.SdkHttpFullRequest;
47+
import software.amazon.awssdk.http.auth.aws.scheme.AwsV4aAuthScheme;
4248
import software.amazon.awssdk.identity.spi.Identity;
4349
import software.amazon.awssdk.utils.CompletableFutureUtils;
4450
import software.amazon.awssdk.utils.Logger;
@@ -112,7 +118,8 @@ private String finalizeUserAgent(RequestExecutionContext context) {
112118
userAgentMetadata.forEach(s -> javaUserAgent.append(SPACE).append(s));
113119
}
114120

115-
Optional<String> businessMetrics = getBusinessMetricsString(context.executionAttributes(), groupedApiNames.right());
121+
Optional<String> businessMetrics = getBusinessMetricsString(context.executionAttributes(),
122+
groupedApiNames.right(), context);
116123
businessMetrics.ifPresent(
117124
metrics -> appendSpaceAndField(javaUserAgent, BUSINESS_METADATA, metrics)
118125
);
@@ -143,15 +150,20 @@ private static Pair<List<ApiName>, Collection<String>> groupApiNames(List<ApiNam
143150
}
144151

145152
private static Optional<String> getBusinessMetricsString(ExecutionAttributes executionAttributes,
146-
Collection<String> metricsFromApiNames) {
153+
Collection<String> metricsFromApiNames,
154+
RequestExecutionContext context) {
147155
BusinessMetricCollection businessMetrics =
148156
executionAttributes.getAttribute(SdkInternalExecutionAttribute.BUSINESS_METRICS);
149157
if (businessMetrics == null) {
150158
businessMetrics = new BusinessMetricCollection();
151159
}
152160
businessMetrics.merge(metricsFromApiNames);
153161

154-
credentialProviderBusinessMetrics(executionAttributes).ifPresent(businessMetrics::merge);
162+
SelectedAuthScheme<?> selectedAuthScheme =
163+
executionAttributes.getAttribute(SdkInternalExecutionAttribute.SELECTED_AUTH_SCHEME);
164+
165+
credentialProviderBusinessMetrics(selectedAuthScheme).ifPresent(businessMetrics::merge);
166+
addSigV4aBusinessMetrics(selectedAuthScheme, businessMetrics, context, executionAttributes);
155167

156168
if (businessMetrics.recordedMetrics().isEmpty()) {
157169
return Optional.empty();
@@ -161,11 +173,9 @@ private static Optional<String> getBusinessMetricsString(ExecutionAttributes exe
161173
}
162174

163175
private static Optional<Collection<String>> credentialProviderBusinessMetrics(
164-
ExecutionAttributes executionAttributes) {
165-
return Optional.ofNullable(
166-
executionAttributes.getAttribute(SdkInternalExecutionAttribute.SELECTED_AUTH_SCHEME))
167-
.map(selectedAuthScheme ->
168-
CompletableFutureUtils.joinLikeSync(selectedAuthScheme.identity()))
176+
SelectedAuthScheme<?> selectedAuthScheme) {
177+
return Optional.ofNullable(selectedAuthScheme)
178+
.map(scheme -> CompletableFutureUtils.joinLikeSync(scheme.identity()))
169179
.flatMap(Identity::providerName)
170180
.map(providerName -> {
171181
if (StringUtils.isBlank(providerName)) {
@@ -175,6 +185,26 @@ private static Optional<Collection<String>> credentialProviderBusinessMetrics(
175185
});
176186
}
177187

188+
private static boolean isSignerOverridden(RequestExecutionContext context, ExecutionAttributes executionAttributes) {
189+
boolean isClientSignerOverridden =
190+
Boolean.TRUE.equals(executionAttributes.getAttribute(SdkExecutionAttribute.SIGNER_OVERRIDDEN));
191+
Optional<Signer> requestSigner = context.originalRequest().overrideConfiguration()
192+
.flatMap(RequestOverrideConfiguration::signer);
193+
return isClientSignerOverridden || requestSigner.isPresent();
194+
}
195+
196+
private static void addSigV4aBusinessMetrics(SelectedAuthScheme<?> selectedAuthScheme,
197+
BusinessMetricCollection businessMetrics,
198+
RequestExecutionContext context,
199+
ExecutionAttributes executionAttributes) {
200+
if (selectedAuthScheme != null &&
201+
selectedAuthScheme.authSchemeOption().schemeId().equals(AwsV4aAuthScheme.SCHEME_ID) &&
202+
!isSignerOverridden(context, executionAttributes)) {
203+
204+
businessMetrics.addMetric(BusinessMetricFeatureId.SIGV4A_SIGNING.value());
205+
}
206+
}
207+
178208
/**
179209
* This structure is used for external users as well as for internal tracking of features.
180210
* It's not governed by a specification.

0 commit comments

Comments
 (0)