Skip to content

Commit 4bf4d3a

Browse files
authored
Add ClientOverrideConfiguration getter to SdkClientBuilder. (#3023) (#3024)
1 parent 46b6460 commit 4bf4d3a

File tree

4 files changed

+257
-18
lines changed

4 files changed

+257
-18
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "smswz",
5+
"description": "Add `ClientOverrideConfiguration` getter to `SdkClientBuilder`. Allows for changing multiple overrides on a client through the client builder alone."
6+
}

core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkClientBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@ default B overrideConfiguration(Consumer<ClientOverrideConfiguration.Builder> ov
4646
return overrideConfiguration(ClientOverrideConfiguration.builder().applyMutation(overrideConfiguration).build());
4747
}
4848

49+
/**
50+
* Retrieve the current override configuration. This allows further overrides across calls. Can be modified by first
51+
* converting to a builder with {@link ClientOverrideConfiguration#toBuilder()}.
52+
* @return The existing override configuration for the builder.
53+
*/
54+
ClientOverrideConfiguration overrideConfiguration();
55+
4956
/**
5057
* Configure the endpoint with which the SDK should communicate.
5158
*/

core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ public abstract class SdkDefaultClientBuilder<B extends SdkClientBuilder<B, C>,
114114
private final SdkHttpClient.Builder defaultHttpClientBuilder;
115115
private final SdkAsyncHttpClient.Builder defaultAsyncHttpClientBuilder;
116116

117+
private ClientOverrideConfiguration clientOverrideConfiguration;
118+
117119
private SdkHttpClient.Builder httpClientBuilder;
118120
private SdkAsyncHttpClient.Builder asyncHttpClientBuilder;
119121

@@ -150,6 +152,7 @@ public final C build() {
150152
/**
151153
* Return a client configuration object, populated with the following chain of priorities.
152154
* <ol>
155+
* <li>Client Configuration Overrides</li>
153156
* <li>Customer Configuration</li>
154157
* <li>Service-Specific Defaults</li>
155158
* <li>Global Defaults</li>
@@ -158,6 +161,9 @@ public final C build() {
158161
protected final SdkClientConfiguration syncClientConfiguration() {
159162
SdkClientConfiguration configuration = clientConfiguration.build();
160163

164+
// Apply overrides
165+
configuration = setOverrides(configuration);
166+
161167
// Apply defaults
162168
configuration = mergeChildDefaults(configuration);
163169
configuration = mergeGlobalDefaults(configuration);
@@ -173,6 +179,7 @@ protected final SdkClientConfiguration syncClientConfiguration() {
173179
/**
174180
* Return a client configuration object, populated with the following chain of priorities.
175181
* <ol>
182+
* <li>Client Configuration Overrides</li>
176183
* <li>Customer Configuration</li>
177184
* <li>Implementation/Service-Specific Configuration</li>
178185
* <li>Global Default Configuration</li>
@@ -181,6 +188,9 @@ protected final SdkClientConfiguration syncClientConfiguration() {
181188
protected final SdkClientConfiguration asyncClientConfiguration() {
182189
SdkClientConfiguration configuration = clientConfiguration.build();
183190

191+
// Apply overrides
192+
configuration = setOverrides(configuration);
193+
184194
// Apply defaults
185195
configuration = mergeChildDefaults(configuration);
186196
configuration = mergeGlobalDefaults(configuration);
@@ -193,6 +203,39 @@ protected final SdkClientConfiguration asyncClientConfiguration() {
193203
return configuration;
194204
}
195205

206+
private SdkClientConfiguration setOverrides(SdkClientConfiguration configuration) {
207+
if (clientOverrideConfiguration == null) {
208+
return configuration;
209+
}
210+
211+
SdkClientConfiguration.Builder builder = configuration.toBuilder();
212+
213+
builder.option(EXECUTION_INTERCEPTORS, clientOverrideConfiguration.executionInterceptors());
214+
builder.option(RETRY_POLICY, clientOverrideConfiguration.retryPolicy().orElse(null));
215+
builder.option(ADDITIONAL_HTTP_HEADERS, clientOverrideConfiguration.headers());
216+
builder.option(SIGNER, clientOverrideConfiguration.advancedOption(SIGNER).orElse(null));
217+
builder.option(USER_AGENT_SUFFIX, clientOverrideConfiguration.advancedOption(USER_AGENT_SUFFIX).orElse(null));
218+
builder.option(USER_AGENT_PREFIX, clientOverrideConfiguration.advancedOption(USER_AGENT_PREFIX).orElse(null));
219+
builder.option(API_CALL_TIMEOUT, clientOverrideConfiguration.apiCallTimeout().orElse(null));
220+
builder.option(API_CALL_ATTEMPT_TIMEOUT, clientOverrideConfiguration.apiCallAttemptTimeout().orElse(null));
221+
builder.option(DISABLE_HOST_PREFIX_INJECTION,
222+
clientOverrideConfiguration.advancedOption(DISABLE_HOST_PREFIX_INJECTION).orElse(null));
223+
builder.option(PROFILE_FILE, clientOverrideConfiguration.defaultProfileFile().orElse(null));
224+
builder.option(PROFILE_NAME, clientOverrideConfiguration.defaultProfileName().orElse(null));
225+
builder.option(METRIC_PUBLISHERS, clientOverrideConfiguration.metricPublishers());
226+
builder.option(EXECUTION_ATTRIBUTES, clientOverrideConfiguration.executionAttributes());
227+
228+
clientOverrideConfiguration.advancedOption(ENDPOINT_OVERRIDDEN_OVERRIDE).ifPresent(value -> {
229+
builder.option(ENDPOINT_OVERRIDDEN, value);
230+
});
231+
232+
clientOverrideConfiguration.advancedOption(SIGNER).ifPresent(s -> {
233+
builder.option(SIGNER_OVERRIDDEN, true);
234+
});
235+
236+
return builder.build();
237+
}
238+
196239
/**
197240
* Optionally overridden by child implementations to apply implementation-specific default configuration.
198241
* (eg. AWS's default credentials providers)
@@ -399,31 +442,24 @@ public final void setAsyncConfiguration(ClientAsyncConfiguration asyncConfigurat
399442

400443
@Override
401444
public final B overrideConfiguration(ClientOverrideConfiguration overrideConfig) {
402-
clientConfiguration.option(EXECUTION_INTERCEPTORS, overrideConfig.executionInterceptors());
403-
clientConfiguration.option(RETRY_POLICY, overrideConfig.retryPolicy().orElse(null));
404-
clientConfiguration.option(ADDITIONAL_HTTP_HEADERS, overrideConfig.headers());
405-
clientConfiguration.option(SIGNER, overrideConfig.advancedOption(SIGNER).orElse(null));
406-
clientConfiguration.option(USER_AGENT_SUFFIX, overrideConfig.advancedOption(USER_AGENT_SUFFIX).orElse(null));
407-
clientConfiguration.option(USER_AGENT_PREFIX, overrideConfig.advancedOption(USER_AGENT_PREFIX).orElse(null));
408-
clientConfiguration.option(API_CALL_TIMEOUT, overrideConfig.apiCallTimeout().orElse(null));
409-
clientConfiguration.option(API_CALL_ATTEMPT_TIMEOUT, overrideConfig.apiCallAttemptTimeout().orElse(null));
410-
clientConfiguration.option(DISABLE_HOST_PREFIX_INJECTION,
411-
overrideConfig.advancedOption(DISABLE_HOST_PREFIX_INJECTION).orElse(null));
412-
clientConfiguration.option(PROFILE_FILE, overrideConfig.defaultProfileFile().orElse(null));
413-
clientConfiguration.option(PROFILE_NAME, overrideConfig.defaultProfileName().orElse(null));
414-
clientConfiguration.option(METRIC_PUBLISHERS, overrideConfig.metricPublishers());
415-
clientConfiguration.option(EXECUTION_ATTRIBUTES, overrideConfig.executionAttributes());
416-
overrideConfig.advancedOption(ENDPOINT_OVERRIDDEN_OVERRIDE).ifPresent(value -> {
417-
clientConfiguration.option(ENDPOINT_OVERRIDDEN, value);
418-
});
419-
overrideConfig.advancedOption(SIGNER).ifPresent(s -> clientConfiguration.option(SIGNER_OVERRIDDEN, true));
445+
clientOverrideConfiguration = overrideConfig;
446+
420447
return thisBuilder();
421448
}
422449

423450
public final void setOverrideConfiguration(ClientOverrideConfiguration overrideConfiguration) {
424451
overrideConfiguration(overrideConfiguration);
425452
}
426453

454+
@Override
455+
public final ClientOverrideConfiguration overrideConfiguration() {
456+
if (clientOverrideConfiguration == null) {
457+
return ClientOverrideConfiguration.builder().build();
458+
}
459+
460+
return clientOverrideConfiguration;
461+
}
462+
427463
public final B httpClient(SdkHttpClient httpClient) {
428464
clientConfiguration.option(SdkClientOption.SYNC_HTTP_CLIENT, httpClient);
429465
return thisBuilder();

0 commit comments

Comments
 (0)