Skip to content

Commit 65b6517

Browse files
committed
Refactoring retry policy
1 parent de4d6fd commit 65b6517

File tree

68 files changed

+838
-2079
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+838
-2079
lines changed

core/src/it/java/software/amazon/awssdk/core/http/AmazonHttpClientSslHandshakeTimeoutIntegrationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import software.amazon.awssdk.core.AmazonClientException;
2626
import software.amazon.awssdk.core.internal.http.request.EmptyHttpRequest;
2727
import software.amazon.awssdk.core.internal.http.response.NullErrorResponseHandler;
28-
import software.amazon.awssdk.core.retry.PredefinedRetryPolicies;
28+
import software.amazon.awssdk.core.retry.RetryPolicy;
2929
import software.amazon.awssdk.http.apache.ApacheSdkHttpClientFactory;
3030
import utils.HttpTestUtils;
3131

@@ -44,7 +44,7 @@ public class AmazonHttpClientSslHandshakeTimeoutIntegrationTest extends Unrespon
4444
public void testSslHandshakeTimeout() {
4545
AmazonHttpClient httpClient = HttpTestUtils.testClientBuilder()
4646
.clientExecutionTimeout(null)
47-
.retryPolicy(PredefinedRetryPolicies.NO_RETRY_POLICY)
47+
.retryPolicy(RetryPolicy.NONE)
4848
.httpClient(ApacheSdkHttpClientFactory.builder()
4949
.socketTimeout(CLIENT_SOCKET_TO)
5050
.build()

core/src/it/java/software/amazon/awssdk/core/http/ConnectionPoolMaxConnectionsIntegrationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import software.amazon.awssdk.core.http.server.MockServer;
2929
import software.amazon.awssdk.core.internal.http.request.EmptyHttpRequest;
3030
import software.amazon.awssdk.core.internal.http.response.EmptyAWSResponseHandler;
31-
import software.amazon.awssdk.core.retry.PredefinedRetryPolicies;
31+
import software.amazon.awssdk.core.retry.RetryPolicy;
3232
import software.amazon.awssdk.http.apache.ApacheSdkHttpClientFactory;
3333
import utils.HttpTestUtils;
3434

@@ -56,7 +56,7 @@ public void leasing_a_new_connection_fails_with_connection_pool_timeout() throws
5656

5757
AmazonHttpClient httpClient = HttpTestUtils.testClientBuilder()
5858
.clientExecutionTimeout(null)
59-
.retryPolicy(PredefinedRetryPolicies.NO_RETRY_POLICY)
59+
.retryPolicy(RetryPolicy.NONE)
6060
.httpClient(ApacheSdkHttpClientFactory.builder()
6161
.connectionTimeout(
6262
Duration.ofMillis(100))

core/src/it/java/software/amazon/awssdk/core/http/timers/client/UnresponsiveServerIntegrationTests.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@
4040
import software.amazon.awssdk.core.http.exception.ClientExecutionTimeoutException;
4141
import software.amazon.awssdk.core.internal.http.timers.TimeoutTestConstants;
4242
import software.amazon.awssdk.core.retry.FixedTimeBackoffStrategy;
43-
import software.amazon.awssdk.core.retry.PredefinedRetryPolicies;
4443
import software.amazon.awssdk.core.retry.RetryPolicy;
45-
import software.amazon.awssdk.core.retry.RetryPolicyAdapter;
4644
import software.amazon.awssdk.http.SdkHttpClient;
4745
import software.amazon.awssdk.http.apache.ApacheSdkHttpClientFactory;
4846
import utils.HttpTestUtils;
@@ -85,10 +83,10 @@ public void clientExecutionTimeoutDisabled_SocketTimeoutExceptionIsThrown_NoThre
8583
public void interruptCausedBySomethingOtherThanTimer_PropagatesInterruptToCaller() {
8684
Duration socketTimeout = Duration.ofMillis(100);
8785

88-
RetryPolicyAdapter retryPolicy = new RetryPolicyAdapter(
89-
new RetryPolicy(PredefinedRetryPolicies.DEFAULT_RETRY_CONDITION,
90-
new FixedTimeBackoffStrategy(CLIENT_EXECUTION_TIMEOUT.toMillis()),
91-
1, false));
86+
RetryPolicy retryPolicy = RetryPolicy.builder()
87+
.backoffStrategy(new FixedTimeBackoffStrategy(CLIENT_EXECUTION_TIMEOUT))
88+
.numRetries(1)
89+
.build();
9290

9391
ClientOverrideConfiguration overrideConfiguration =
9492
ClientOverrideConfiguration.builder()

core/src/main/java/software/amazon/awssdk/core/config/ClientOverrideConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.Map;
2424
import software.amazon.awssdk.annotations.ReviewBeforeRelease;
2525
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
26-
import software.amazon.awssdk.core.retry.v2.RetryPolicy;
26+
import software.amazon.awssdk.core.retry.RetryPolicy;
2727
import software.amazon.awssdk.utils.AttributeMap;
2828
import software.amazon.awssdk.utils.CollectionUtils;
2929
import software.amazon.awssdk.utils.builder.CopyableBuilder;

core/src/main/java/software/amazon/awssdk/core/config/defaults/DynamoDbClientConfigurationDefaults.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

core/src/main/java/software/amazon/awssdk/core/config/defaults/GlobalClientConfigurationDefaults.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
import java.util.concurrent.ScheduledExecutorService;
2626
import software.amazon.awssdk.annotations.ReviewBeforeRelease;
2727
import software.amazon.awssdk.annotations.SdkInternalApi;
28+
import software.amazon.awssdk.core.config.ClientConfiguration;
2829
import software.amazon.awssdk.core.config.ClientOverrideConfiguration;
2930
import software.amazon.awssdk.core.interceptor.ClasspathInterceptorChainFactory;
3031
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
31-
import software.amazon.awssdk.core.retry.PredefinedRetryPolicies;
32-
import software.amazon.awssdk.core.retry.RetryPolicyAdapter;
32+
import software.amazon.awssdk.core.retry.RetryPolicy;
3333
import software.amazon.awssdk.core.util.UserAgentUtils;
3434

3535
/**
@@ -54,8 +54,7 @@ protected void applyOverrideDefaults(ClientOverrideConfiguration.Builder builder
5454
builder.advancedOption(CRC32_FROM_COMPRESSED_DATA_ENABLED,
5555
applyDefault(configuration.advancedOption(CRC32_FROM_COMPRESSED_DATA_ENABLED), () -> false));
5656

57-
builder.retryPolicy(applyDefault(configuration.retryPolicy(), () ->
58-
new RetryPolicyAdapter(PredefinedRetryPolicies.DEFAULT)));
57+
builder.retryPolicy(applyDefault(configuration.retryPolicy(), () -> RetryPolicy.DEFAULT));
5958

6059
// Put global interceptors before the ones currently configured.
6160
List<ExecutionInterceptor> globalInterceptors = new ClasspathInterceptorChainFactory().getGlobalInterceptors();

core/src/main/java/software/amazon/awssdk/core/http/AmazonAsyncHttpClient.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.concurrent.CompletableFuture;
2121
import software.amazon.awssdk.annotations.SdkInternalApi;
2222
import software.amazon.awssdk.annotations.ThreadSafe;
23+
import software.amazon.awssdk.core.Request;
2324
import software.amazon.awssdk.core.RequestConfig;
2425
import software.amazon.awssdk.core.RequestExecutionContext;
2526
import software.amazon.awssdk.core.SdkBaseException;
@@ -42,7 +43,7 @@
4243
import software.amazon.awssdk.core.http.pipeline.stages.SigningStage;
4344
import software.amazon.awssdk.core.http.pipeline.stages.UnwrapResponseContainer;
4445
import software.amazon.awssdk.core.internal.http.timers.client.ClientExecutionTimer;
45-
import software.amazon.awssdk.core.retry.v2.RetryPolicy;
46+
import software.amazon.awssdk.core.retry.SdkDefaultRetrySettings;
4647
import software.amazon.awssdk.core.util.CapacityManager;
4748
import software.amazon.awssdk.http.SdkHttpFullRequest;
4849
import software.amazon.awssdk.http.async.SdkHttpRequestProvider;
@@ -65,7 +66,7 @@ public AmazonAsyncHttpClient(AsyncClientConfiguration configuration) {
6566
private CapacityManager createCapacityManager() {
6667
// When enabled, total retry capacity is computed based on retry cost and desired number of retries.
6768
// TODO: Allow customers to configure throttled retries (https://github.com/aws/aws-sdk-java-v2/issues/17)
68-
return new CapacityManager(RetryPolicy.THROTTLED_RETRY_COST * RetryPolicy.THROTTLED_RETRIES);
69+
return new CapacityManager(SdkDefaultRetrySettings.RETRY_THROTTLING_COST * SdkDefaultRetrySettings.THROTTLED_RETRIES);
6970
}
7071

7172
/**

core/src/main/java/software/amazon/awssdk/core/http/AmazonHttpClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
import software.amazon.awssdk.core.internal.http.response.AwsErrorResponseHandler;
5757
import software.amazon.awssdk.core.internal.http.response.AwsResponseHandlerAdapter;
5858
import software.amazon.awssdk.core.internal.http.timers.client.ClientExecutionTimer;
59-
import software.amazon.awssdk.core.retry.v2.RetryPolicy;
59+
import software.amazon.awssdk.core.retry.SdkDefaultRetrySettings;
6060
import software.amazon.awssdk.core.util.CapacityManager;
6161
import software.amazon.awssdk.http.SdkHttpFullRequest;
6262
import software.amazon.awssdk.utils.SdkAutoCloseable;
@@ -82,7 +82,7 @@ public AmazonHttpClient(SyncClientConfiguration syncClientConfiguration) {
8282
private CapacityManager createCapacityManager() {
8383
// When enabled, total retry capacity is computed based on retry cost and desired number of retries.
8484
// TODO: Allow customers to configure throttled retries (https://github.com/aws/aws-sdk-java-v2/issues/17)
85-
return new CapacityManager(RetryPolicy.THROTTLED_RETRY_COST * RetryPolicy.THROTTLED_RETRIES);
85+
return new CapacityManager(SdkDefaultRetrySettings.RETRY_THROTTLING_COST * SdkDefaultRetrySettings.THROTTLED_RETRIES);
8686
}
8787

8888
/**

core/src/main/java/software/amazon/awssdk/core/http/pipeline/stages/AsyncRetryableStage.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.io.IOException;
2121
import java.io.InputStream;
22+
import java.time.Duration;
2223
import java.util.concurrent.CompletableFuture;
2324
import java.util.concurrent.ScheduledExecutorService;
2425
import java.util.concurrent.TimeUnit;
@@ -36,8 +37,8 @@
3637
import software.amazon.awssdk.core.http.HttpClientDependencies;
3738
import software.amazon.awssdk.core.http.pipeline.RequestPipeline;
3839
import software.amazon.awssdk.core.retry.RetryHandler;
40+
import software.amazon.awssdk.core.retry.RetryPolicy;
3941
import software.amazon.awssdk.core.retry.RetryUtils;
40-
import software.amazon.awssdk.core.retry.v2.RetryPolicy;
4142
import software.amazon.awssdk.core.util.CapacityManager;
4243
import software.amazon.awssdk.core.util.ClockSkewUtil;
4344
import software.amazon.awssdk.http.SdkHttpFullRequest;
@@ -138,7 +139,7 @@ private Void handle(CompletableFuture<Response<OutputT>> future,
138139
private void executeRetry(CompletableFuture<Response<OutputT>> future) {
139140
publishProgress(progressListener, ProgressEventType.CLIENT_REQUEST_RETRY_EVENT);
140141
final int retriesAttempted = requestCount - 2;
141-
long delay = retryHandler.computeDelayBeforeNextRetry();
142+
Duration delay = retryHandler.computeDelayBeforeNextRetry();
142143

143144
if (log.isDebugEnabled()) {
144145
log.debug("Retryable error detected, will retry in " + delay + "ms, attempt number: " +
@@ -147,7 +148,7 @@ private void executeRetry(CompletableFuture<Response<OutputT>> future) {
147148
retrySubmitter.schedule(() -> {
148149
execute(future);
149150
return null;
150-
}, delay, TimeUnit.MILLISECONDS);
151+
}, delay.toMillis(), TimeUnit.MILLISECONDS);
151152
}
152153

153154
private void beforeExecute() {

core/src/main/java/software/amazon/awssdk/core/http/pipeline/stages/RetryableStage.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
import java.io.IOException;
2121
import java.io.InputStream;
22+
import java.time.Duration;
23+
import java.util.concurrent.TimeUnit;
2224
import org.slf4j.Logger;
2325
import org.slf4j.LoggerFactory;
2426
import software.amazon.awssdk.core.AmazonServiceException;
@@ -35,8 +37,8 @@
3537
import software.amazon.awssdk.core.http.pipeline.RequestPipeline;
3638
import software.amazon.awssdk.core.http.pipeline.RequestToResponsePipeline;
3739
import software.amazon.awssdk.core.retry.RetryHandler;
40+
import software.amazon.awssdk.core.retry.RetryPolicy;
3841
import software.amazon.awssdk.core.retry.RetryUtils;
39-
import software.amazon.awssdk.core.retry.v2.RetryPolicy;
4042
import software.amazon.awssdk.core.util.CapacityManager;
4143
import software.amazon.awssdk.core.util.ClockSkewUtil;
4244
import software.amazon.awssdk.http.SdkHttpFullRequest;
@@ -204,12 +206,12 @@ private void pauseBeforeRetry() throws InterruptedException {
204206
*/
205207
private void doPauseBeforeRetry() throws InterruptedException {
206208
final int retriesAttempted = requestCount - 2;
207-
long delay = retryHandler.computeDelayBeforeNextRetry();
209+
Duration delay = retryHandler.computeDelayBeforeNextRetry();
208210

209211
if (log.isDebugEnabled()) {
210212
log.debug("Retriable error detected, " + "will retry in " + delay + "ms, attempt number: " + retriesAttempted);
211213
}
212-
Thread.sleep(delay);
214+
TimeUnit.MILLISECONDS.sleep(delay.toMillis());
213215
}
214216
}
215217
}

0 commit comments

Comments
 (0)