Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change STANDARD mode retry count for DynamoDB to match LEGACY as V1 #2324

Merged
merged 1 commit into from
Mar 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changes/next-release/feature-AWSSDKforJavav2-e6a3a04.json
Original file line number Diff line number Diff line change
@@ -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."
}
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand All @@ -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.
Expand Down Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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);
}


}