Skip to content

Commit abf7a2c

Browse files
authored
Reduce base delay of STANDARD retry mode to 100ms for non-throttling responses. (#2763)
This reduces tail latency in the event of transient failures.
1 parent af68ccf commit abf7a2c

File tree

4 files changed

+24
-13
lines changed

4 files changed

+24
-13
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"contributor": "",
4+
"type": "feature",
5+
"description": "Reduce base delay of STANDARD retry mode to 100ms for non-throttling responses. This reduces tail latency in the event of transient failures."
6+
}

core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/retry/SdkDefaultRetrySetting.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public static final class Legacy {
4848

4949
public static final class Standard {
5050
private static final int MAX_ATTEMPTS = 3;
51-
private static final Duration BASE_DELAY = Duration.ofSeconds(1);
51+
private static final Duration BASE_DELAY = Duration.ofMillis(100);
5252
private static final Duration THROTTLED_BASE_DELAY = Duration.ofSeconds(1);
5353
private static final int THROTTLE_EXCEPTION_TOKEN_COST = 5;
5454
private static final int DEFAULT_EXCEPTION_TOKEN_COST = 5;

core/sdk-core/src/test/java/software/amazon/awssdk/core/retry/RetryPolicyTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public void standardRetryMode_shouldUseFullJitterOnly() {
143143

144144
assertThat(standardRetryPolicy.backoffStrategy()).isInstanceOf(FullJitterBackoffStrategy.class);
145145
FullJitterBackoffStrategy backoffStrategy = (FullJitterBackoffStrategy) standardRetryPolicy.backoffStrategy();
146-
assertThat(backoffStrategy.toBuilder().baseDelay()).isEqualTo(Duration.ofSeconds(1));
146+
assertThat(backoffStrategy.toBuilder().baseDelay()).isEqualTo(Duration.ofMillis(100));
147147
assertThat(backoffStrategy.toBuilder().maxBackoffTime()).isEqualTo(Duration.ofSeconds(20));
148148

149149
assertThat(standardRetryPolicy.throttlingBackoffStrategy()).isInstanceOf(FullJitterBackoffStrategy.class);
@@ -159,7 +159,7 @@ public void adaptiveRetryMode_shouldUseFullJitterOnly() {
159159

160160
assertThat(standardRetryPolicy.backoffStrategy()).isInstanceOf(FullJitterBackoffStrategy.class);
161161
FullJitterBackoffStrategy backoffStrategy = (FullJitterBackoffStrategy) standardRetryPolicy.backoffStrategy();
162-
assertThat(backoffStrategy.toBuilder().baseDelay()).isEqualTo(Duration.ofSeconds(1));
162+
assertThat(backoffStrategy.toBuilder().baseDelay()).isEqualTo(Duration.ofMillis(100));
163163
assertThat(backoffStrategy.toBuilder().maxBackoffTime()).isEqualTo(Duration.ofSeconds(20));
164164

165165
assertThat(standardRetryPolicy.throttlingBackoffStrategy()).isInstanceOf(FullJitterBackoffStrategy.class);

core/sdk-core/src/test/java/software/amazon/awssdk/core/retry/backoff/FullJitterBackoffStrategyTest.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,31 +44,36 @@ public static Collection<TestCase> parameters() throws Exception {
4444
return Arrays.asList(
4545
new TestCase().backoffStrategy(BackoffStrategy.defaultStrategy(RetryMode.STANDARD))
4646
.retriesAttempted(0)
47-
.expectedMaxDelay(Duration.ofSeconds(1))
48-
.expectedMedDelay(Duration.ofMillis(500))
47+
.expectedMaxDelay(Duration.ofMillis(100))
48+
.expectedMedDelay(Duration.ofMillis(50))
4949
.expectedMinDelay(Duration.ofMillis(1)),
5050
new TestCase().backoffStrategy(BackoffStrategy.defaultStrategy(RetryMode.STANDARD))
5151
.retriesAttempted(1)
52-
.expectedMaxDelay(Duration.ofSeconds(2))
53-
.expectedMedDelay(Duration.ofSeconds(1))
52+
.expectedMaxDelay(Duration.ofMillis(200))
53+
.expectedMedDelay(Duration.ofMillis(100))
5454
.expectedMinDelay(Duration.ofMillis(1)),
5555
new TestCase().backoffStrategy(BackoffStrategy.defaultStrategy(RetryMode.STANDARD))
5656
.retriesAttempted(2)
57-
.expectedMaxDelay(Duration.ofSeconds(4))
58-
.expectedMedDelay(Duration.ofSeconds(2))
57+
.expectedMaxDelay(Duration.ofMillis(400))
58+
.expectedMedDelay(Duration.ofMillis(200))
5959
.expectedMinDelay(Duration.ofMillis(1)),
6060
new TestCase().backoffStrategy(BackoffStrategy.defaultStrategy(RetryMode.STANDARD))
6161
.retriesAttempted(3)
62-
.expectedMaxDelay(Duration.ofSeconds(8))
63-
.expectedMedDelay(Duration.ofSeconds(4))
62+
.expectedMaxDelay(Duration.ofMillis(800))
63+
.expectedMedDelay(Duration.ofMillis(400))
6464
.expectedMinDelay(Duration.ofMillis(1)),
6565
new TestCase().backoffStrategy(BackoffStrategy.defaultStrategy(RetryMode.STANDARD))
6666
.retriesAttempted(4)
67-
.expectedMaxDelay(Duration.ofSeconds(16))
68-
.expectedMedDelay(Duration.ofSeconds(8))
67+
.expectedMaxDelay(Duration.ofMillis(1600))
68+
.expectedMedDelay(Duration.ofMillis(800))
6969
.expectedMinDelay(Duration.ofMillis(1)),
7070
new TestCase().backoffStrategy(BackoffStrategy.defaultStrategy(RetryMode.STANDARD))
7171
.retriesAttempted(5)
72+
.expectedMaxDelay(Duration.ofMillis(3200))
73+
.expectedMedDelay(Duration.ofMillis(1600))
74+
.expectedMinDelay(Duration.ofMillis(1)),
75+
new TestCase().backoffStrategy(BackoffStrategy.defaultStrategy(RetryMode.STANDARD))
76+
.retriesAttempted(100)
7277
.expectedMaxDelay(Duration.ofSeconds(20))
7378
.expectedMedDelay(Duration.ofSeconds(10))
7479
.expectedMinDelay(Duration.ofMillis(1))

0 commit comments

Comments
 (0)