Skip to content

Commit 30c0fe8

Browse files
authored
Correctly consider defaultRetryMode customization (#5365)
prevent the defaultRetryMode defined in customization.config from being overridden during codegen
1 parent e7a2aab commit 30c0fe8

File tree

5 files changed

+120
-1
lines changed

5 files changed

+120
-1
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "bugfix",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "",
5+
"description": "prevent defaultRetryMode in customization.config from not being taken into account"
6+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private SdkClientConfiguration finalizeAwsConfiguration(SdkClientConfiguration c
176176
.lazyOptionIfAbsent(AwsClientOption.DUALSTACK_ENDPOINT_ENABLED, this::resolveDualstackEndpointEnabled)
177177
.lazyOptionIfAbsent(AwsClientOption.FIPS_ENDPOINT_ENABLED, this::resolveFipsEndpointEnabled)
178178
.lazyOption(AwsClientOption.DEFAULTS_MODE, this::resolveDefaultsMode)
179-
.lazyOption(SdkClientOption.DEFAULT_RETRY_MODE, this::resolveDefaultRetryMode)
179+
.lazyOptionIfAbsent(SdkClientOption.DEFAULT_RETRY_MODE, this::resolveDefaultRetryMode)
180180
.lazyOption(ServiceMetadataAdvancedOption.DEFAULT_S3_US_EAST_1_REGIONAL_ENDPOINT,
181181
this::resolveDefaultS3UsEast1RegionalEndpoint)
182182
.lazyOptionIfAbsent(AwsClientOption.CREDENTIALS_IDENTITY_PROVIDER,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"defaultRetryMode": "STANDARD",
3+
4+
"useSraAuth": true,
5+
"enableGenerateCompiledEndpointRules": true
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"version":"2.0",
3+
"metadata":{
4+
"apiVersion":"2016-03-11",
5+
"endpointPrefix":"defaultretrymodetest",
6+
"jsonVersion":"1.1",
7+
"protocol":"rest-json",
8+
"serviceAbbreviation":"DefaultRetryModeTestService",
9+
"serviceFullName":"AWS Default Retry Mode Test Service",
10+
"serviceId":"DefaultRetryMode",
11+
"signatureVersion":"v4",
12+
"targetPrefix":"default-retry-mode-prefix",
13+
"timestampFormat":"unixTimestamp",
14+
"uid":"restjson-2016-03-11"
15+
},
16+
"operations":{
17+
"OneOperation":{
18+
"name":"OneOperation",
19+
"http":{
20+
"method":"POST",
21+
"requestUri":"/test/uri"
22+
},
23+
"input":{"shape":"OneShape"}
24+
}
25+
},
26+
"shapes": {
27+
"OneShape": {
28+
"type": "structure",
29+
"members": {
30+
"StringMember": {
31+
"shape": "String"
32+
}
33+
}
34+
},
35+
"String":{"type":"string"}
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.awssdk.services.defaultsmode;
17+
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
20+
import org.junit.jupiter.api.Test;
21+
import software.amazon.awssdk.core.retry.RetryMode;
22+
import software.amazon.awssdk.regions.Region;
23+
import software.amazon.awssdk.retries.LegacyRetryStrategy;
24+
import software.amazon.awssdk.retries.StandardRetryStrategy;
25+
import software.amazon.awssdk.services.defaultretrymode.DefaultRetryModeAsyncClient;
26+
import software.amazon.awssdk.services.defaultretrymode.DefaultRetryModeClient;
27+
28+
public class DefaultRetryModeTest {
29+
30+
@Test
31+
void defaultRetryModeSyncClient_whenSetInCustomization_shouldBeStandardByDefault() {
32+
DefaultRetryModeClient client = DefaultRetryModeClient.builder()
33+
.region(Region.US_WEST_2)
34+
.build();
35+
assertThat(client.serviceClientConfiguration().overrideConfiguration().retryStrategy().get())
36+
.isInstanceOf(StandardRetryStrategy.class);
37+
}
38+
39+
@Test
40+
void defaultRetryModeAsyncClient_whenSetInCustomization_shouldBeStandardByDefault() {
41+
DefaultRetryModeAsyncClient client = DefaultRetryModeAsyncClient.builder()
42+
.region(Region.US_WEST_2)
43+
.build();
44+
assertThat(client.serviceClientConfiguration().overrideConfiguration().retryStrategy().get())
45+
.isInstanceOf(StandardRetryStrategy.class);
46+
}
47+
48+
@Test
49+
void syncClient_overrideRetryStrategy_shouldOverride() {
50+
DefaultRetryModeClient client =
51+
DefaultRetryModeClient.builder()
52+
.region(Region.US_WEST_2)
53+
.overrideConfiguration(conf -> conf.retryStrategy(RetryMode.LEGACY))
54+
.build();
55+
assertThat(client.serviceClientConfiguration().overrideConfiguration().retryStrategy().get())
56+
.isInstanceOf(LegacyRetryStrategy.class);
57+
58+
}
59+
60+
@Test
61+
void asyncClient_overrideRetryStrategy_shouldOverride() {
62+
DefaultRetryModeAsyncClient client =
63+
DefaultRetryModeAsyncClient.builder()
64+
.region(Region.US_WEST_2)
65+
.overrideConfiguration(conf -> conf.retryStrategy(RetryMode.LEGACY))
66+
.build();
67+
assertThat(client.serviceClientConfiguration().overrideConfiguration().retryStrategy().get())
68+
.isInstanceOf(LegacyRetryStrategy.class);
69+
}
70+
}

0 commit comments

Comments
 (0)