diff --git a/.changes/next-release/feature-AWSSDKforJavav2-e6a3a04.json b/.changes/next-release/feature-AWSSDKforJavav2-e6a3a04.json new file mode 100644 index 000000000000..cc932d62dec3 --- /dev/null +++ b/.changes/next-release/feature-AWSSDKforJavav2-e6a3a04.json @@ -0,0 +1,6 @@ +{ + "category": "Amazon DynamoDB", + "contributor": "", + "type": "feature", + "description": "Change STANDARD mode retry count which was 2 for DynamoDB to match LEGACY retry count which is 8." +} diff --git a/services/dynamodb/src/main/java/software/amazon/awssdk/services/dynamodb/DynamoDbRetryPolicy.java b/services/dynamodb/src/main/java/software/amazon/awssdk/services/dynamodb/DynamoDbRetryPolicy.java index f5b0208eb9df..b470e1b8a700 100644 --- a/services/dynamodb/src/main/java/software/amazon/awssdk/services/dynamodb/DynamoDbRetryPolicy.java +++ b/services/dynamodb/src/main/java/software/amazon/awssdk/services/dynamodb/DynamoDbRetryPolicy.java @@ -26,6 +26,7 @@ import software.amazon.awssdk.core.retry.backoff.BackoffStrategy; import software.amazon.awssdk.core.retry.backoff.FullJitterBackoffStrategy; + /** * Default retry policy for DynamoDB Client. */ @@ -36,6 +37,11 @@ final class DynamoDbRetryPolicy { * Default max retry count for DynamoDB client, when using the LEGACY retry mode. **/ private static final int LEGACY_MAX_ERROR_RETRY = 8; + + /** + * Default max retry count for DynamoDB client, when using the STANDARD retry mode. + **/ + private static final int STANDARD_MAX_ERROR_RETRY = LEGACY_MAX_ERROR_RETRY; /** * Default base sleep time for DynamoDB, when using the LEGACY retry mode. @@ -69,18 +75,22 @@ public static RetryPolicy resolveRetryPolicy(SdkClientConfiguration config) { .profileName(config.option(SdkClientOption.PROFILE_NAME)) .resolve(); - if (retryMode != RetryMode.LEGACY) { - return AwsRetryPolicy.forRetryMode(retryMode) - .toBuilder() - .additionalRetryConditionsAllowed(false) - .build(); + switch (retryMode) { + case LEGACY: + return AwsRetryPolicy.forRetryMode(RetryMode.LEGACY) + .toBuilder() + .additionalRetryConditionsAllowed(false) + .numRetries(LEGACY_MAX_ERROR_RETRY) + .backoffStrategy(LEGACY_BACKOFF_STRATEGY) + .build(); + case STANDARD: + return AwsRetryPolicy.forRetryMode(retryMode) + .toBuilder() + .additionalRetryConditionsAllowed(false) + .numRetries(STANDARD_MAX_ERROR_RETRY) + .build(); + default: + throw new IllegalArgumentException("Unknown retry mode: " + retryMode); } - - return AwsRetryPolicy.forRetryMode(RetryMode.LEGACY) - .toBuilder() - .additionalRetryConditionsAllowed(false) - .numRetries(LEGACY_MAX_ERROR_RETRY) - .backoffStrategy(LEGACY_BACKOFF_STRATEGY) - .build(); } } diff --git a/services/dynamodb/src/test/java/software/amazon/awssdk/services/dynamodb/DynamoDbRetryPolicyTest.java b/services/dynamodb/src/test/java/software/amazon/awssdk/services/dynamodb/DynamoDbRetryPolicyTest.java new file mode 100644 index 000000000000..77ba2799b9ee --- /dev/null +++ b/services/dynamodb/src/test/java/software/amazon/awssdk/services/dynamodb/DynamoDbRetryPolicyTest.java @@ -0,0 +1,35 @@ +package software.amazon.awssdk.services.dynamodb; + +import org.junit.Test; +import software.amazon.awssdk.core.SdkSystemSetting; +import software.amazon.awssdk.core.client.config.SdkClientConfiguration; +import software.amazon.awssdk.core.retry.RetryPolicy; +import software.amazon.awssdk.profiles.ProfileFileSystemSetting; +import software.amazon.awssdk.testutils.EnvironmentVariableHelper; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DynamoDbRetryPolicyTest { + + private static final EnvironmentVariableHelper ENVIRONMENT_VARIABLE_HELPER = new EnvironmentVariableHelper(); + + @Test + public void test_numRetries_with_standardRetryPolicy() { + ENVIRONMENT_VARIABLE_HELPER.set(SdkSystemSetting.AWS_RETRY_MODE.environmentVariable(), "standard"); + System.setProperty(ProfileFileSystemSetting.AWS_PROFILE.property(), "default"); + final SdkClientConfiguration sdkClientConfiguration = SdkClientConfiguration.builder().build(); + final RetryPolicy retryPolicy = DynamoDbRetryPolicy.resolveRetryPolicy(sdkClientConfiguration); + assertThat(retryPolicy.numRetries()).isEqualTo(8); + } + + @Test + public void test_numRetries_with_legacyRetryPolicy() { + ENVIRONMENT_VARIABLE_HELPER.set(SdkSystemSetting.AWS_RETRY_MODE.environmentVariable(), "legacy"); + System.setProperty(ProfileFileSystemSetting.AWS_PROFILE.property(), "default"); + final SdkClientConfiguration sdkClientConfiguration = SdkClientConfiguration.builder().build(); + final RetryPolicy retryPolicy = DynamoDbRetryPolicy.resolveRetryPolicy(sdkClientConfiguration); + assertThat(retryPolicy.numRetries()).isEqualTo(8); + } + + +}