Skip to content

Commit 28ef24b

Browse files
authored
[Default Configuration Part 5]: Move default configuration related classes to aws-core (#2816)
* Move default configuration related classes to aws-core * Remove extra space and fix build
1 parent c5dfa80 commit 28ef24b

File tree

27 files changed

+113
-120
lines changed

27 files changed

+113
-120
lines changed

codegen-lite-maven-plugin/src/main/java/software/amazon/awssdk/codegen/lite/maven/plugin/DefaultsModeGenerationMojo.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
@Mojo(name = "generate-defaults-mode")
3535
public class DefaultsModeGenerationMojo extends AbstractMojo {
3636

37-
private static final String DEFAULTS_MODE_BASE = "software.amazon.awssdk.defaultsmode";
38-
private static final String DEFAULTS_MODE_CONFIGURATION_BASE = "software.amazon.awssdk.internal.defaultsmode";
37+
private static final String DEFAULTS_MODE_BASE = "software.amazon.awssdk.awscore.defaultsmode";
38+
private static final String DEFAULTS_MODE_CONFIGURATION_BASE = "software.amazon.awssdk.awscore.internal.defaultsmode";
3939

4040
@Parameter(property = "outputDirectory", defaultValue = "${project.build.directory}")
4141
private String outputDirectory;
@@ -44,7 +44,7 @@ public class DefaultsModeGenerationMojo extends AbstractMojo {
4444
private MavenProject project;
4545

4646
@Parameter(property = "defaultConfigurationFile", defaultValue =
47-
"${basedir}/src/main/resources/software/amazon/awssdk/internal/defaults/sdk-default-configuration.json")
47+
"${basedir}/src/main/resources/software/amazon/awssdk/awscore/internal/defaults/sdk-default-configuration.json")
4848
private File defaultConfigurationFile;
4949

5050
public void execute() {

codegen-lite/src/main/java/software/amazon/awssdk/codegen/lite/defaultsmode/DefaultsModeGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ private CodeBlock documentation() {
140140
.add("<p>The defaults mode can be configured:")
141141
.add(System.lineSeparator())
142142
.add("<ol>")
143-
.add("<li>Directly on a client via {@code ClientOverrideConfiguration.Builder#defaultsMode"
143+
.add("<li>Directly on a client via {@code AwsClientBuilder.Builder#defaultsMode"
144144
+ "(DefaultsMode)}.</li>")
145145
.add(System.lineSeparator())
146146
.add("<li>On a configuration profile via the \"defaults_mode\" profile file property.</li>")

codegen-lite/src/test/resources/software/amazon/awssdk/codegen/lite/defaultsmode/defaults-mode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
* <p>
2828
* The defaults mode can be configured:
2929
* <ol>
30-
* <li>Directly on a client via {@code ClientOverrideConfiguration.Builder#defaultsMode(DefaultsMode)}.</li>
30+
* <li>Directly on a client via {@code AwsClientBuilder.Builder#defaultsMode(DefaultsMode)}.</li>
3131
* <li>On a configuration profile via the "defaults_mode" profile file property.</li>
3232
* <li>Globally via the "aws.defaultsMode" system property.</li>
3333
* <li>Globally via the "AWS_DEFAULTS_MODE" environment variable.</li>

core/aws-core/pom.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,19 @@
164164
</archive>
165165
</configuration>
166166
</plugin>
167+
<plugin>
168+
<groupId>software.amazon.awssdk</groupId>
169+
<artifactId>codegen-lite-maven-plugin</artifactId>
170+
<version>${awsjavasdk.version}</version>
171+
<executions>
172+
<execution>
173+
<phase>generate-sources</phase>
174+
<goals>
175+
<goal>generate-defaults-mode</goal>
176+
</goals>
177+
</execution>
178+
</executions>
179+
</plugin>
167180
</plugins>
168181
</build>
169182

core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import software.amazon.awssdk.annotations.SdkPublicApi;
1919
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
20+
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
2021
import software.amazon.awssdk.core.client.builder.SdkClientBuilder;
2122
import software.amazon.awssdk.regions.Region;
2223

@@ -64,4 +65,24 @@ public interface AwsClientBuilder<BuilderT extends AwsClientBuilder<BuilderT, Cl
6465
* </ol>
6566
*/
6667
BuilderT region(Region region);
68+
69+
/**
70+
* Sets the {@link DefaultsMode} that will be used to determine how certain default configuration options are resolved in
71+
* the SDK.
72+
*
73+
* <p>
74+
* If this is not specified, the SDK will attempt to identify the defaults mode automatically using the following logic:
75+
* <ol>
76+
* <li>Check the "defaults_mode" profile file property.</li>
77+
* <li>Check "aws.defaultsMode" system property.</li>
78+
* <li>Check the "AWS_DEFAULTS_MODE" environment variable.</li>
79+
* </ol>
80+
*
81+
* @param defaultsMode the defaultsMode to use
82+
* @return This object for method chaining.
83+
* @see DefaultsMode
84+
*/
85+
default BuilderT defaultsMode(DefaultsMode defaultsMode) {
86+
throw new UnsupportedOperationException();
87+
}
6788
}

core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsDefaultClientBuilder.java

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
package software.amazon.awssdk.awscore.client.builder;
1717

18-
import static software.amazon.awssdk.core.client.config.SdkClientOption.DEFAULTS_MODE;
18+
import static software.amazon.awssdk.awscore.client.config.AwsClientOption.DEFAULTS_MODE;
1919

2020
import java.net.URI;
2121
import java.util.Arrays;
@@ -27,23 +27,23 @@
2727
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
2828
import software.amazon.awssdk.awscore.client.config.AwsAdvancedClientOption;
2929
import software.amazon.awssdk.awscore.client.config.AwsClientOption;
30+
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
3031
import software.amazon.awssdk.awscore.endpoint.DefaultServiceEndpointBuilder;
3132
import software.amazon.awssdk.awscore.eventstream.EventStreamInitialRequestInterceptor;
3233
import software.amazon.awssdk.awscore.interceptor.HelpfulUnknownHostExceptionInterceptor;
3334
import software.amazon.awssdk.awscore.internal.defaultsmode.AutoDefaultsModeDiscovery;
35+
import software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeConfiguration;
36+
import software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeResolver;
3437
import software.amazon.awssdk.awscore.retry.AwsRetryPolicy;
3538
import software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder;
3639
import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption;
3740
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
3841
import software.amazon.awssdk.core.client.config.SdkClientOption;
3942
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
40-
import software.amazon.awssdk.core.internal.defaultsmode.DefaultsModeResolver;
4143
import software.amazon.awssdk.core.retry.RetryMode;
4244
import software.amazon.awssdk.core.retry.RetryPolicy;
43-
import software.amazon.awssdk.defaultsmode.DefaultsMode;
4445
import software.amazon.awssdk.http.SdkHttpClient;
4546
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
46-
import software.amazon.awssdk.internal.defaultsmode.DefaultsModeConfiguration;
4747
import software.amazon.awssdk.profiles.ProfileFile;
4848
import software.amazon.awssdk.regions.Region;
4949
import software.amazon.awssdk.regions.ServiceMetadata;
@@ -125,7 +125,7 @@ protected final AttributeMap childHttpConfig() {
125125
@Override
126126
protected final AttributeMap childHttpConfig(SdkClientConfiguration configuration) {
127127
AttributeMap attributeMap = serviceHttpConfig();
128-
return attributeMap.merge(httpConfigFromDefaultsMode(configuration));
128+
return mergeSmartHttpDefaults(configuration, attributeMap);
129129
}
130130

131131
/**
@@ -160,6 +160,13 @@ protected SdkClientConfiguration mergeInternalDefaults(SdkClientConfiguration co
160160
return configuration;
161161
}
162162

163+
/**
164+
* Return a client configuration object, populated with the following chain of priorities.
165+
* <ol>
166+
* <li>Defaults vended from {@link DefaultsMode} </li>
167+
* <li>AWS Global Defaults</li>
168+
* </ol>
169+
*/
163170
@Override
164171
protected final SdkClientConfiguration finalizeChildConfiguration(SdkClientConfiguration configuration) {
165172
configuration = finalizeServiceConfiguration(configuration);
@@ -168,9 +175,7 @@ protected final SdkClientConfiguration finalizeChildConfiguration(SdkClientConfi
168175
.option(AwsClientOption.AWS_REGION, resolveRegion(configuration))
169176
.build();
170177

171-
configuration = configuration.toBuilder()
172-
.option(SdkClientOption.DEFAULTS_MODE, resolveDefaultsMode(configuration))
173-
.build();
178+
configuration = mergeSmartDefaults(configuration);
174179

175180
return configuration.toBuilder()
176181
.option(AwsClientOption.CREDENTIALS_PROVIDER, resolveCredentials(configuration))
@@ -181,6 +186,16 @@ protected final SdkClientConfiguration finalizeChildConfiguration(SdkClientConfi
181186
.build();
182187
}
183188

189+
private SdkClientConfiguration mergeSmartDefaults(SdkClientConfiguration configuration) {
190+
DefaultsMode defaultsMode = resolveDefaultsMode(configuration);
191+
RetryMode retryMode = DefaultsModeConfiguration.defaultConfig(defaultsMode).get(SdkClientOption.DEFAULT_RETRY_MODE);
192+
193+
return configuration.toBuilder()
194+
.option(DEFAULTS_MODE, defaultsMode)
195+
.build()
196+
.merge(c -> c.option(SdkClientOption.DEFAULT_RETRY_MODE, retryMode));
197+
}
198+
184199
/**
185200
* Optionally overridden by child classes to derive service-specific configuration from the default-applied configuration.
186201
*/
@@ -189,11 +204,11 @@ protected SdkClientConfiguration finalizeServiceConfiguration(SdkClientConfigura
189204
}
190205

191206
/**
192-
* Return the defaults specified for each {@link DefaultsMode}
207+
* Merged the HTTP defaults specified for each {@link DefaultsMode}
193208
*/
194-
private AttributeMap httpConfigFromDefaultsMode(SdkClientConfiguration sdkClientConfiguration) {
195-
DefaultsMode defaultsMode = sdkClientConfiguration.option(DEFAULTS_MODE);
196-
return DefaultsModeConfiguration.defaultHttpConfig(defaultsMode);
209+
private AttributeMap mergeSmartHttpDefaults(SdkClientConfiguration configuration, AttributeMap attributeMap) {
210+
DefaultsMode defaultsMode = configuration.option(DEFAULTS_MODE);
211+
return attributeMap.merge(DefaultsModeConfiguration.defaultHttpConfig(defaultsMode));
197212
}
198213

199214
/**
@@ -248,12 +263,13 @@ private Region regionFromDefaultProvider(SdkClientConfiguration config) {
248263
}
249264

250265
private DefaultsMode resolveDefaultsMode(SdkClientConfiguration config) {
251-
DefaultsMode defaultsMode = config.option(DEFAULTS_MODE) != null ?
252-
config.option(DEFAULTS_MODE) :
253-
DefaultsModeResolver.create()
254-
.profileFile(() -> config.option(SdkClientOption.PROFILE_FILE))
255-
.profileName(config.option(SdkClientOption.PROFILE_NAME))
256-
.resolve();
266+
DefaultsMode defaultsMode =
267+
config.option(AwsClientOption.DEFAULTS_MODE) != null ?
268+
config.option(AwsClientOption.DEFAULTS_MODE) :
269+
DefaultsModeResolver.create()
270+
.profileFile(() -> config.option(SdkClientOption.PROFILE_FILE))
271+
.profileName(config.option(SdkClientOption.PROFILE_NAME))
272+
.resolve();
257273

258274
if (defaultsMode == DefaultsMode.AUTO) {
259275
defaultsMode = autoDefaultsModeDiscovery.discover(config.option(AwsClientOption.AWS_REGION));
@@ -291,18 +307,11 @@ private RetryPolicy resolveAwsRetryPolicy(SdkClientConfiguration config) {
291307
RetryMode retryMode = RetryMode.resolver()
292308
.profileFile(() -> config.option(SdkClientOption.PROFILE_FILE))
293309
.profileName(config.option(SdkClientOption.PROFILE_NAME))
294-
.defaultRetryMode(resolveDefaultRetryMode(config))
310+
.defaultRetryMode(config.option(SdkClientOption.DEFAULT_RETRY_MODE))
295311
.resolve();
296312
return AwsRetryPolicy.forRetryMode(retryMode);
297313
}
298314

299-
private RetryMode resolveDefaultRetryMode(SdkClientConfiguration config) {
300-
DefaultsMode defaultsMode = config.option(DEFAULTS_MODE);
301-
RetryMode retryMode = config.option(SdkClientOption.DEFAULT_RETRY_MODE);
302-
return retryMode != null ? retryMode :
303-
DefaultsModeConfiguration.defaultConfig(defaultsMode).get(SdkClientOption.DEFAULT_RETRY_MODE);
304-
}
305-
306315
@Override
307316
public final BuilderT region(Region region) {
308317
clientConfiguration.option(AwsClientOption.AWS_REGION, region);
@@ -333,4 +342,14 @@ private List<ExecutionInterceptor> awsInterceptors() {
333342
return Arrays.asList(new HelpfulUnknownHostExceptionInterceptor(),
334343
new EventStreamInitialRequestInterceptor());
335344
}
345+
346+
@Override
347+
public final BuilderT defaultsMode(DefaultsMode defaultsMode) {
348+
clientConfiguration.option(DEFAULTS_MODE, defaultsMode);
349+
return thisBuilder();
350+
}
351+
352+
public final void setDefaultsMode(DefaultsMode defaultsMode) {
353+
defaultsMode(defaultsMode);
354+
}
336355
}

core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import software.amazon.awssdk.annotations.SdkProtectedApi;
1919
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
2020
import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder;
21+
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
2122
import software.amazon.awssdk.core.client.config.ClientOption;
2223
import software.amazon.awssdk.regions.Region;
2324

@@ -53,6 +54,11 @@ public final class AwsClientOption<T> extends ClientOption<T> {
5354
*/
5455
public static final AwsClientOption<String> ENDPOINT_PREFIX = new AwsClientOption<>(String.class);
5556

57+
/**
58+
* Option to specify the {@link DefaultsMode}
59+
*/
60+
public static final AwsClientOption<DefaultsMode> DEFAULTS_MODE = new AwsClientOption<>(DefaultsMode.class);
61+
5662
private AwsClientOption(Class<T> valueClass) {
5763
super(valueClass);
5864
}

core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscovery.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
import java.util.Optional;
1919
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
2021
import software.amazon.awssdk.core.SdkSystemSetting;
21-
import software.amazon.awssdk.defaultsmode.DefaultsMode;
2222
import software.amazon.awssdk.regions.Region;
2323
import software.amazon.awssdk.regions.internal.util.EC2MetadataUtils;
2424
import software.amazon.awssdk.utils.JavaSystemSetting;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16-
package software.amazon.awssdk.core.internal.defaultsmode;
16+
package software.amazon.awssdk.awscore.internal.defaultsmode;
1717

1818
import java.util.Locale;
1919
import java.util.Optional;
2020
import java.util.function.Supplier;
2121
import software.amazon.awssdk.annotations.SdkInternalApi;
22+
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
2223
import software.amazon.awssdk.core.SdkSystemSetting;
2324
import software.amazon.awssdk.core.retry.RetryMode;
24-
import software.amazon.awssdk.defaultsmode.DefaultsMode;
2525
import software.amazon.awssdk.profiles.ProfileFile;
2626
import software.amazon.awssdk.profiles.ProfileFileSystemSetting;
2727
import software.amazon.awssdk.profiles.ProfileProperty;

core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultAwsClientBuilderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@
4242
import org.mockito.runners.MockitoJUnitRunner;
4343
import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider;
4444
import software.amazon.awssdk.auth.signer.Aws4Signer;
45+
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
4546
import software.amazon.awssdk.awscore.internal.defaultsmode.AutoDefaultsModeDiscovery;
4647
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
4748
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
4849
import software.amazon.awssdk.core.client.config.SdkClientOption;
4950
import software.amazon.awssdk.core.signer.Signer;
50-
import software.amazon.awssdk.defaultsmode.DefaultsMode;
5151
import software.amazon.awssdk.http.SdkHttpClient;
5252
import software.amazon.awssdk.http.SdkHttpConfigurationOption;
5353
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;

core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultsModeTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import static org.mockito.Mockito.mock;
2121
import static org.mockito.Mockito.when;
2222
import static software.amazon.awssdk.awscore.client.config.AwsAdvancedClientOption.ENABLE_DEFAULT_REGION_DETECTION;
23-
import static software.amazon.awssdk.core.client.config.SdkClientOption.DEFAULTS_MODE;
23+
import static software.amazon.awssdk.awscore.client.config.AwsClientOption.DEFAULTS_MODE;
2424
import static software.amazon.awssdk.core.client.config.SdkClientOption.DEFAULT_RETRY_MODE;
2525
import static software.amazon.awssdk.core.client.config.SdkClientOption.RETRY_POLICY;
2626

@@ -30,15 +30,15 @@
3030
import org.mockito.Mock;
3131
import org.mockito.runners.MockitoJUnitRunner;
3232
import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider;
33+
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
3334
import software.amazon.awssdk.awscore.internal.defaultsmode.AutoDefaultsModeDiscovery;
35+
import software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeConfiguration;
3436
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
3537
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
3638
import software.amazon.awssdk.core.retry.RetryMode;
37-
import software.amazon.awssdk.defaultsmode.DefaultsMode;
3839
import software.amazon.awssdk.http.SdkHttpClient;
3940
import software.amazon.awssdk.http.SdkHttpConfigurationOption;
4041
import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
41-
import software.amazon.awssdk.internal.defaultsmode.DefaultsModeConfiguration;
4242
import software.amazon.awssdk.regions.Region;
4343
import software.amazon.awssdk.utils.AttributeMap;
4444

@@ -83,7 +83,7 @@ public void nonLegacyDefaultsMode_shouldApplySdkDefaultsAndHttpDefaults() {
8383

8484
TestClient client =
8585
testClientBuilder().region(Region.US_WEST_1)
86-
.overrideConfiguration(o -> o.defaultsMode(targetMode))
86+
.defaultsMode(targetMode)
8787
.httpClientBuilder((SdkHttpClient.Builder) serviceDefaults -> {
8888
AttributeMap defaultHttpConfig = DefaultsModeConfiguration.defaultHttpConfig(targetMode);
8989
AttributeMap mergedDefaults = SERVICE_DEFAULTS.merge(defaultHttpConfig);
@@ -104,7 +104,7 @@ public void nonLegacyDefaultsModeAsyncClient_shouldApplySdkDefaultsAndHttpDefaul
104104

105105
TestAsyncClient client =
106106
testAsyncClientBuilder().region(Region.US_WEST_1)
107-
.overrideConfiguration(o -> o.defaultsMode(targetMode))
107+
.defaultsMode(targetMode)
108108
.httpClientBuilder((SdkHttpClient.Builder) serviceDefaults -> {
109109
AttributeMap defaultHttpConfig = DefaultsModeConfiguration.defaultHttpConfig(targetMode);
110110
AttributeMap mergedDefaults = SERVICE_DEFAULTS.merge(defaultHttpConfig);
@@ -123,8 +123,8 @@ public void nonLegacyDefaultsModeAsyncClient_shouldApplySdkDefaultsAndHttpDefaul
123123
public void clientOverrideRetryMode_shouldTakePrecedence() {
124124
TestClient client =
125125
testClientBuilder().region(Region.US_WEST_1)
126-
.overrideConfiguration(o -> o.defaultsMode(DefaultsMode.IN_REGION)
127-
.retryPolicy(RetryMode.LEGACY))
126+
.defaultsMode(DefaultsMode.IN_REGION)
127+
.overrideConfiguration(o -> o.retryPolicy(RetryMode.LEGACY))
128128
.build();
129129
assertThat(client.clientConfiguration.option(DEFAULTS_MODE)).isEqualTo(DefaultsMode.IN_REGION);
130130
assertThat(client.clientConfiguration.option(RETRY_POLICY).retryMode()).isEqualTo(RetryMode.LEGACY);
@@ -136,7 +136,7 @@ public void autoMode_shouldResolveDefaultsMode() {
136136
when(autoModeDiscovery.discover(any(Region.class))).thenReturn(expectedMode);
137137
TestClient client =
138138
testClientBuilder().region(Region.US_WEST_1)
139-
.overrideConfiguration(o -> o.defaultsMode(DefaultsMode.AUTO))
139+
.defaultsMode(DefaultsMode.AUTO)
140140
.build();
141141

142142
assertThat(client.clientConfiguration.option(DEFAULTS_MODE)).isEqualTo(expectedMode);

0 commit comments

Comments
 (0)