Skip to content

Commit 10089d1

Browse files
committed
Refactor the retry strategies
This change uses a single class to implement the core logic of all the retries strategies and adds extension points to tailor the behavior when needed.
1 parent 46e5194 commit 10089d1

File tree

9 files changed

+789
-29
lines changed

9 files changed

+789
-29
lines changed

core/retries/src/it/java/software/amazon/awssdk/retries/internal/AdaptiveRetryStrategyResourceConstrainedTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
* perceived availability for the clients to be close to 1.0.
5252
*/
5353
class AdaptiveRetryStrategyResourceConstrainedTest {
54+
static final int DEFAULT_EXCEPTION_TOKEN_COST = 5;
5455

5556
@Test
5657
void seemsToBeCorrectAndThreadSafe() {
@@ -61,12 +62,12 @@ void seemsToBeCorrectAndThreadSafe() {
6162
int parallelism = serverWorkers + clientWorkers;
6263
ExecutorService executor = Executors.newFixedThreadPool(parallelism);
6364
Server server = new Server(serverWorkers, executor);
64-
RateLimiterTokenBucketStore store = RateLimiterTokenBucketStore.builder().build();
65-
AdaptiveRetryStrategy strategy = DefaultAdaptiveRetryStrategy
65+
AdaptiveRetryStrategy strategy = DefaultAdaptiveRetryStrategy2
6666
.builder()
6767
// We don't care about how many attempts we allow to, that logic is tested somewhere else.
6868
// so we give the strategy plenty of room for retries.
6969
.maxAttempts(20)
70+
.tokenBucketExceptionCost(DEFAULT_EXCEPTION_TOKEN_COST)
7071
.tokenBucketStore(TokenBucketStore.builder().tokenBucketMaxCapacity(10_000).build())
7172
// Just wait for the rate limiter delays.
7273
.backoffStrategy(BackoffStrategy.retryImmediately())

core/retries/src/main/java/software/amazon/awssdk/retries/AdaptiveRetryStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import software.amazon.awssdk.retries.api.AcquireInitialTokenRequest;
2222
import software.amazon.awssdk.retries.api.BackoffStrategy;
2323
import software.amazon.awssdk.retries.api.RetryStrategy;
24-
import software.amazon.awssdk.retries.internal.DefaultAdaptiveRetryStrategy;
24+
import software.amazon.awssdk.retries.internal.DefaultAdaptiveRetryStrategy2;
2525
import software.amazon.awssdk.retries.internal.circuitbreaker.TokenBucketStore;
2626
import software.amazon.awssdk.retries.internal.ratelimiter.RateLimiterTokenBucketStore;
2727

@@ -63,7 +63,7 @@ public interface AdaptiveRetryStrategy extends RetryStrategy<AdaptiveRetryStrate
6363
* </pre>
6464
*/
6565
static AdaptiveRetryStrategy.Builder builder() {
66-
return DefaultAdaptiveRetryStrategy
66+
return DefaultAdaptiveRetryStrategy2
6767
.builder()
6868
.maxAttempts(DefaultRetryStrategy.Adaptive.MAX_ATTEMPTS)
6969
.tokenBucketStore(TokenBucketStore.builder()

core/retries/src/main/java/software/amazon/awssdk/retries/LegacyRetryStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import software.amazon.awssdk.annotations.ThreadSafe;
2121
import software.amazon.awssdk.retries.api.BackoffStrategy;
2222
import software.amazon.awssdk.retries.api.RetryStrategy;
23-
import software.amazon.awssdk.retries.internal.DefaultLegacyRetryStrategy;
23+
import software.amazon.awssdk.retries.internal.DefaultLegacyRetryStrategy2;
2424
import software.amazon.awssdk.retries.internal.circuitbreaker.TokenBucketStore;
2525

2626
/**
@@ -59,7 +59,7 @@ public interface LegacyRetryStrategy extends RetryStrategy<LegacyRetryStrategy.B
5959
* </pre>
6060
*/
6161
static Builder builder() {
62-
return DefaultLegacyRetryStrategy
62+
return DefaultLegacyRetryStrategy2
6363
.builder()
6464
.maxAttempts(DefaultRetryStrategy.Legacy.MAX_ATTEMPTS)
6565
.tokenBucketStore(TokenBucketStore

core/retries/src/main/java/software/amazon/awssdk/retries/StandardRetryStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import software.amazon.awssdk.annotations.ThreadSafe;
2020
import software.amazon.awssdk.retries.api.BackoffStrategy;
2121
import software.amazon.awssdk.retries.api.RetryStrategy;
22-
import software.amazon.awssdk.retries.internal.DefaultStandardRetryStrategy;
22+
import software.amazon.awssdk.retries.internal.DefaultStandardRetryStrategy2;
2323
import software.amazon.awssdk.retries.internal.circuitbreaker.TokenBucketStore;
2424

2525
/**
@@ -56,7 +56,7 @@ public interface StandardRetryStrategy extends RetryStrategy<StandardRetryStrate
5656
* </pre>
5757
*/
5858
static Builder builder() {
59-
return DefaultStandardRetryStrategy
59+
return DefaultStandardRetryStrategy2
6060
.builder()
6161
.maxAttempts(DefaultRetryStrategy.Standard.MAX_ATTEMPTS)
6262
.tokenBucketStore(TokenBucketStore

0 commit comments

Comments
 (0)