Skip to content

Commit c48f60e

Browse files
authored
Use 25 ms base delay for DynamoDB in standard retry mode. (aws#2709)
1 parent ca8aa92 commit c48f60e

File tree

2 files changed

+43
-38
lines changed

2 files changed

+43
-38
lines changed

services/dynamodb/src/main/java/software/amazon/awssdk/services/dynamodb/DynamoDbRetryPolicy.java

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -34,30 +34,23 @@
3434
final class DynamoDbRetryPolicy {
3535

3636
/**
37-
* Default max retry count for DynamoDB client, when using the LEGACY retry mode.
37+
* Default max retry count for DynamoDB client, regardless of retry mode.
3838
**/
39-
private static final int LEGACY_MAX_ERROR_RETRY = 8;
39+
private static final int MAX_ERROR_RETRY = 8;
4040

4141
/**
42-
* Default max retry count for DynamoDB client, when using the STANDARD retry mode.
42+
* Default base sleep time for DynamoDB, regardless of retry mode.
4343
**/
44-
private static final int STANDARD_MAX_ERROR_RETRY = LEGACY_MAX_ERROR_RETRY;
45-
46-
/**
47-
* Default base sleep time for DynamoDB, when using the LEGACY retry mode.
48-
**/
49-
private static final Duration LEGACY_BASE_DELAY = Duration.ofMillis(25);
44+
private static final Duration BASE_DELAY = Duration.ofMillis(25);
5045

5146
/**
5247
* The default back-off strategy for DynamoDB client, which increases
5348
* exponentially up to a max amount of delay. Compared to the SDK default
5449
* back-off strategy, it applies a smaller scale factor.
55-
*
56-
* This is only used when using the LEGACY retry mode.
5750
*/
58-
private static final BackoffStrategy LEGACY_BACKOFF_STRATEGY =
51+
private static final BackoffStrategy BACKOFF_STRATEGY =
5952
FullJitterBackoffStrategy.builder()
60-
.baseDelay(LEGACY_BASE_DELAY)
53+
.baseDelay(BASE_DELAY)
6154
.maxBackoffTime(SdkDefaultRetrySetting.MAX_BACKOFF)
6255
.build();
6356

@@ -76,22 +69,11 @@ public static RetryPolicy resolveRetryPolicy(SdkClientConfiguration config) {
7669
.defaultRetryMode(config.option(SdkClientOption.DEFAULT_RETRY_MODE))
7770
.resolve();
7871

79-
switch (retryMode) {
80-
case LEGACY:
81-
return AwsRetryPolicy.forRetryMode(RetryMode.LEGACY)
82-
.toBuilder()
83-
.additionalRetryConditionsAllowed(false)
84-
.numRetries(LEGACY_MAX_ERROR_RETRY)
85-
.backoffStrategy(LEGACY_BACKOFF_STRATEGY)
86-
.build();
87-
case STANDARD:
88-
return AwsRetryPolicy.forRetryMode(retryMode)
89-
.toBuilder()
90-
.additionalRetryConditionsAllowed(false)
91-
.numRetries(STANDARD_MAX_ERROR_RETRY)
92-
.build();
93-
default:
94-
throw new IllegalArgumentException("Unknown retry mode: " + retryMode);
95-
}
72+
return AwsRetryPolicy.forRetryMode(retryMode)
73+
.toBuilder()
74+
.additionalRetryConditionsAllowed(false)
75+
.numRetries(MAX_ERROR_RETRY)
76+
.backoffStrategy(BACKOFF_STRATEGY)
77+
.build();
9678
}
9779
}
Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,58 @@
11
package software.amazon.awssdk.services.dynamodb;
22

3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.time.Duration;
6+
import org.junit.After;
7+
import org.junit.Before;
38
import org.junit.Test;
49
import software.amazon.awssdk.core.SdkSystemSetting;
510
import software.amazon.awssdk.core.client.config.SdkClientConfiguration;
611
import software.amazon.awssdk.core.retry.RetryPolicy;
7-
import software.amazon.awssdk.profiles.ProfileFileSystemSetting;
12+
import software.amazon.awssdk.core.retry.backoff.BackoffStrategy;
13+
import software.amazon.awssdk.core.retry.backoff.FullJitterBackoffStrategy;
814
import software.amazon.awssdk.testutils.EnvironmentVariableHelper;
915

10-
import static org.assertj.core.api.Assertions.assertThat;
11-
1216
public class DynamoDbRetryPolicyTest {
1317

14-
private static final EnvironmentVariableHelper ENVIRONMENT_VARIABLE_HELPER = new EnvironmentVariableHelper();
18+
private EnvironmentVariableHelper environmentVariableHelper;
19+
20+
@Before
21+
public void setup() {
22+
environmentVariableHelper = new EnvironmentVariableHelper();
23+
}
24+
25+
@After
26+
public void reset() {
27+
environmentVariableHelper.reset();
28+
}
1529

1630
@Test
1731
public void test_numRetries_with_standardRetryPolicy() {
18-
ENVIRONMENT_VARIABLE_HELPER.set(SdkSystemSetting.AWS_RETRY_MODE.environmentVariable(), "standard");
19-
System.setProperty(ProfileFileSystemSetting.AWS_PROFILE.property(), "default");
32+
environmentVariableHelper.set(SdkSystemSetting.AWS_RETRY_MODE.environmentVariable(), "standard");
2033
final SdkClientConfiguration sdkClientConfiguration = SdkClientConfiguration.builder().build();
2134
final RetryPolicy retryPolicy = DynamoDbRetryPolicy.resolveRetryPolicy(sdkClientConfiguration);
2235
assertThat(retryPolicy.numRetries()).isEqualTo(8);
2336
}
2437

2538
@Test
2639
public void test_numRetries_with_legacyRetryPolicy() {
27-
ENVIRONMENT_VARIABLE_HELPER.set(SdkSystemSetting.AWS_RETRY_MODE.environmentVariable(), "legacy");
28-
System.setProperty(ProfileFileSystemSetting.AWS_PROFILE.property(), "default");
40+
environmentVariableHelper.set(SdkSystemSetting.AWS_RETRY_MODE.environmentVariable(), "legacy");
2941
final SdkClientConfiguration sdkClientConfiguration = SdkClientConfiguration.builder().build();
3042
final RetryPolicy retryPolicy = DynamoDbRetryPolicy.resolveRetryPolicy(sdkClientConfiguration);
3143
assertThat(retryPolicy.numRetries()).isEqualTo(8);
3244
}
3345

46+
@Test
47+
public void test_backoffBaseDelay_with_standardRetryPolicy() {
48+
environmentVariableHelper.set(SdkSystemSetting.AWS_RETRY_MODE.environmentVariable(), "standard");
49+
SdkClientConfiguration sdkClientConfiguration = SdkClientConfiguration.builder().build();
50+
RetryPolicy retryPolicy = DynamoDbRetryPolicy.resolveRetryPolicy(sdkClientConfiguration);
51+
BackoffStrategy backoffStrategy = retryPolicy.backoffStrategy();
52+
53+
assertThat(backoffStrategy).isInstanceOfSatisfying(FullJitterBackoffStrategy.class, fjbs -> {
54+
assertThat(fjbs.toBuilder().baseDelay()).isEqualTo(Duration.ofMillis(25));
55+
});
56+
}
3457

3558
}

0 commit comments

Comments
 (0)