Skip to content

Commit c8ac21e

Browse files
authored
Remove type params from RetryStrategy, but keep them in RetryStrategy… (#5262)
* Remove type params from RetryStrategy, but keep them in RetryStrategy.Builder * Rename from `none` to `doNotRetry` to clarify the behavior
1 parent ccce8b8 commit c8ac21e

File tree

48 files changed

+100
-127
lines changed

Some content is hidden

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

48 files changed

+100
-127
lines changed

core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsDefaultClientBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,15 +348,15 @@ private void configureRetryPolicy(SdkClientConfiguration.Builder config) {
348348
}
349349

350350
private void configureRetryStrategy(SdkClientConfiguration.Builder config) {
351-
RetryStrategy<?, ?> strategy = config.option(SdkClientOption.RETRY_STRATEGY);
351+
RetryStrategy strategy = config.option(SdkClientOption.RETRY_STRATEGY);
352352
if (strategy != null) {
353353
config.option(SdkClientOption.RETRY_STRATEGY, AwsRetryStrategy.configureStrategy(strategy.toBuilder()).build());
354354
return;
355355
}
356356
config.lazyOption(SdkClientOption.RETRY_STRATEGY, this::resolveAwsRetryStrategy);
357357
}
358358

359-
private RetryStrategy<?, ?> resolveAwsRetryStrategy(LazyValueSource config) {
359+
private RetryStrategy resolveAwsRetryStrategy(LazyValueSource config) {
360360
RetryMode retryMode = RetryMode.resolver()
361361
.profileFile(config.get(SdkClientOption.PROFILE_FILE_SUPPLIER))
362362
.profileName(config.get(SdkClientOption.PROFILE_NAME))

core/aws-core/src/main/java/software/amazon/awssdk/awscore/retry/AwsRetryStrategy.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ private AwsRetryStrategy() {
4141
*
4242
* @return The default retry strategy.
4343
*/
44-
public static RetryStrategy<?, ?> defaultRetryStrategy() {
44+
public static RetryStrategy defaultRetryStrategy() {
4545
return forRetryMode(RetryMode.defaultRetryMode());
4646
}
4747

@@ -51,7 +51,7 @@ private AwsRetryStrategy() {
5151
* @param mode The retry mode for which we want to create a retry strategy.
5252
* @return A retry strategy for the given retry mode.
5353
*/
54-
public static RetryStrategy<?, ?> forRetryMode(RetryMode mode) {
54+
public static RetryStrategy forRetryMode(RetryMode mode) {
5555
switch (mode) {
5656
case STANDARD:
5757
return standardRetryStrategy();
@@ -72,19 +72,19 @@ private AwsRetryStrategy() {
7272
* @param strategy The strategy to update
7373
* @return The updated strategy.
7474
*/
75-
public static RetryStrategy<?, ?> addRetryConditions(RetryStrategy<?, ?> strategy) {
75+
public static RetryStrategy addRetryConditions(RetryStrategy strategy) {
7676
return strategy.toBuilder()
7777
.retryOnException(AwsRetryStrategy::retryOnAwsRetryableErrors)
7878
.build();
7979
}
8080

8181
/**
82-
* Returns a retry strategy that does not retry.
82+
* Returns a retry strategy that do not retry.
8383
*
84-
* @return A retry strategy that does not retry.
84+
* @return A retry strategy that do not retry.
8585
*/
86-
public static RetryStrategy<?, ?> none() {
87-
return DefaultRetryStrategy.none();
86+
public static RetryStrategy doNotRetry() {
87+
return DefaultRetryStrategy.doNotRetry();
8888
}
8989

9090
/**
@@ -152,11 +152,11 @@ private static boolean retryOnAwsRetryableErrors(Throwable ex) {
152152
}
153153

154154
/**
155-
* Returns a {@link RetryStrategy<?, ?>} that implements the legacy {@link RetryMode#ADAPTIVE} mode.
155+
* Returns a {@link RetryStrategy} that implements the legacy {@link RetryMode#ADAPTIVE} mode.
156156
*
157-
* @return a {@link RetryStrategy<?, ?>} that implements the legacy {@link RetryMode#ADAPTIVE} mode.
157+
* @return a {@link RetryStrategy} that implements the legacy {@link RetryMode#ADAPTIVE} mode.
158158
*/
159-
private static RetryStrategy<?, ?> legacyAdaptiveRetryStrategy() {
159+
private static RetryStrategy legacyAdaptiveRetryStrategy() {
160160
return RetryPolicyAdapter.builder()
161161
.retryPolicy(AwsRetryPolicy.forRetryMode(RetryMode.ADAPTIVE))
162162
.build();

core/retries-spi/src/main/java/software/amazon/awssdk/retries/api/RetryStrategy.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import java.util.function.Predicate;
1919
import software.amazon.awssdk.annotations.SdkPublicApi;
2020
import software.amazon.awssdk.annotations.ThreadSafe;
21-
import software.amazon.awssdk.utils.builder.CopyableBuilder;
22-
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
2321

2422
/**
2523
* A strategy used by an SDK to determine when something should be retried.
@@ -41,10 +39,7 @@
4139
*/
4240
@ThreadSafe
4341
@SdkPublicApi
44-
public interface RetryStrategy<
45-
B extends CopyableBuilder<B, T> & RetryStrategy.Builder<B, T>,
46-
T extends ToCopyableBuilder<B, T> & RetryStrategy<B, T>>
47-
extends ToCopyableBuilder<B, T> {
42+
public interface RetryStrategy {
4843
/**
4944
* Invoked before the first request attempt.
5045
*
@@ -95,16 +90,14 @@ public interface RetryStrategy<
9590
*
9691
* <p>This is useful for modifying the strategy's behavior, like conditions or max retries.
9792
*/
98-
@Override
99-
B toBuilder();
93+
Builder<?, ?> toBuilder();
10094

10195
/**
10296
* Builder to create immutable instances of {@link RetryStrategy}.
10397
*/
10498
interface Builder<
105-
B extends Builder<B, T> & CopyableBuilder<B, T>,
106-
T extends ToCopyableBuilder<B, T> & RetryStrategy<B, T>>
107-
extends CopyableBuilder<B, T> {
99+
B extends Builder<B, T>,
100+
T extends RetryStrategy> {
108101
/**
109102
* Configure the strategy to retry when the provided predicate returns true, given a failure exception.
110103
*/
@@ -214,7 +207,6 @@ default B retryOnRootCauseInstanceOf(Class<? extends Throwable> throwable) {
214207
/**
215208
* Build a new {@link RetryStrategy} with the current configuration on this builder.
216209
*/
217-
@Override
218210
T build();
219211
}
220212
}

core/retries-spi/src/test/java/software/amazon/awssdk/retries/api/RetryStrategyBuilderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public DummyRetryStrategy build() {
164164
}
165165
}
166166

167-
static class DummyRetryStrategy implements RetryStrategy<BuilderToTestDefaults, DummyRetryStrategy> {
167+
static class DummyRetryStrategy implements RetryStrategy {
168168

169169
@Override
170170
public AcquireInitialTokenResponse acquireInitialToken(AcquireInitialTokenRequest request) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
*/
4949
@SdkPublicApi
5050
@ThreadSafe
51-
public interface AdaptiveRetryStrategy extends RetryStrategy<AdaptiveRetryStrategy.Builder, AdaptiveRetryStrategy> {
51+
public interface AdaptiveRetryStrategy extends RetryStrategy {
5252

5353
/**
5454
* Create a new {@link AdaptiveRetryStrategy.Builder}.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ private DefaultRetryStrategy() {
3030
}
3131

3232
/**
33-
* Creates a non-retrying strategy.
33+
* Returns a retry strategy that do not retry.
3434
*/
35-
public static StandardRetryStrategy none() {
35+
public static StandardRetryStrategy doNotRetry() {
3636
return standardStrategyBuilder()
3737
.maxAttempts(1)
3838
.build();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
*/
4646
@SdkPublicApi
4747
@ThreadSafe
48-
public interface LegacyRetryStrategy extends RetryStrategy<LegacyRetryStrategy.Builder, LegacyRetryStrategy> {
48+
public interface LegacyRetryStrategy extends RetryStrategy {
4949
/**
5050
* Create a new {@link LegacyRetryStrategy.Builder}.
5151
*

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
*/
4343
@SdkPublicApi
4444
@ThreadSafe
45-
public interface StandardRetryStrategy extends RetryStrategy<StandardRetryStrategy.Builder, StandardRetryStrategy> {
45+
public interface StandardRetryStrategy extends RetryStrategy {
4646
/**
4747
* Create a new {@link StandardRetryStrategy.Builder}.
4848
*

core/retries/src/main/java/software/amazon/awssdk/retries/internal/BaseRetryStrategy.java

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,13 @@
3838
import software.amazon.awssdk.retries.internal.circuitbreaker.TokenBucketStore;
3939
import software.amazon.awssdk.utils.Logger;
4040
import software.amazon.awssdk.utils.Validate;
41-
import software.amazon.awssdk.utils.builder.CopyableBuilder;
42-
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
4341

4442
/**
45-
* Generic class that implements that common logic for all the retries
46-
* strategies with extension points for specific strategies to tailor
47-
* the behavior to its needs.
43+
* Generic class that implements that common logic for all the retries strategies with extension points for specific strategies to
44+
* tailor the behavior to its needs.
4845
*/
4946
@SdkInternalApi
50-
public abstract class BaseRetryStrategy<
51-
B extends CopyableBuilder<B, T> & RetryStrategy.Builder<B, T>,
52-
T extends ToCopyableBuilder<B, T> & RetryStrategy<B, T>> implements RetryStrategy<B, T> {
47+
public abstract class BaseRetryStrategy implements RetryStrategy {
5348

5449
protected final Logger log;
5550
protected final List<Predicate<Throwable>> retryPredicates;
@@ -70,8 +65,7 @@ public abstract class BaseRetryStrategy<
7065
}
7166

7267
/**
73-
* This method implements the logic of {@link
74-
* RetryStrategy#acquireInitialToken(AcquireInitialTokenRequest)}.
68+
* This method implements the logic of {@link RetryStrategy#acquireInitialToken(AcquireInitialTokenRequest)}.
7569
*
7670
* @see RetryStrategy#acquireInitialToken(AcquireInitialTokenRequest)
7771
*/
@@ -83,8 +77,7 @@ public final AcquireInitialTokenResponse acquireInitialToken(AcquireInitialToken
8377
}
8478

8579
/**
86-
* This method implements the logic of {@link
87-
* RetryStrategy#refreshRetryToken(RefreshRetryTokenRequest)}.
80+
* This method implements the logic of {@link RetryStrategy#refreshRetryToken(RefreshRetryTokenRequest)}.
8881
*
8982
* @see RetryStrategy#refreshRetryToken(RefreshRetryTokenRequest)
9083
*/
@@ -115,8 +108,7 @@ public final RefreshRetryTokenResponse refreshRetryToken(RefreshRetryTokenReques
115108
}
116109

117110
/**
118-
* This method implements the logic of {@link
119-
* RetryStrategy#recordSuccess(RecordSuccessRequest)}.
111+
* This method implements the logic of {@link RetryStrategy#recordSuccess(RecordSuccessRequest)}.
120112
*
121113
* @see RetryStrategy#recordSuccess(RecordSuccessRequest)
122114
*/
@@ -143,24 +135,18 @@ public int maxAttempts() {
143135
return maxAttempts;
144136
}
145137

146-
@Override
147-
public abstract B toBuilder();
148138

149139
/**
150-
* Computes the backoff before the first attempt, by default
151-
* {@link Duration#ZERO}. Extending classes can override
152-
* this method to compute different a different depending on their
153-
* logic.
140+
* Computes the backoff before the first attempt, by default {@link Duration#ZERO}. Extending classes can override this method
141+
* to compute different a different depending on their logic.
154142
*/
155143
protected Duration computeInitialBackoff(AcquireInitialTokenRequest request) {
156144
return Duration.ZERO;
157145
}
158146

159147
/**
160-
* Computes the backoff before a retry using the configured
161-
* backoff strategy. Extending classes can override
162-
* this method to compute different a different depending on their
163-
* logic.
148+
* Computes the backoff before a retry using the configured backoff strategy. Extending classes can override this method to
149+
* compute different a different depending on their logic.
164150
*/
165151
protected Duration computeBackoff(RefreshRetryTokenRequest request, DefaultRetryToken token) {
166152
Duration backoff = backoffStrategy.computeDelay(token.attempt());
@@ -169,24 +155,21 @@ protected Duration computeBackoff(RefreshRetryTokenRequest request, DefaultRetry
169155
}
170156

171157
/**
172-
* Called inside {@link #recordSuccess} to allow extending classes
173-
* to update their internal state after a successful request.
158+
* Called inside {@link #recordSuccess} to allow extending classes to update their internal state after a successful request.
174159
*/
175160
protected void updateStateForSuccess(DefaultRetryToken token) {
176161
}
177162

178163
/**
179-
* Called inside {@link #refreshRetryToken} to allow extending
180-
* classes to update their internal state before retrying a
164+
* Called inside {@link #refreshRetryToken} to allow extending classes to update their internal state before retrying a
181165
* request.
182166
*/
183167
protected void updateStateForRetry(RefreshRetryTokenRequest request) {
184168
}
185169

186170
/**
187-
* Returns the amount of tokens to withdraw from the token
188-
* bucket. Extending classes can override this method to tailor
189-
* this amount for the specific kind of failure.
171+
* Returns the amount of tokens to withdraw from the token bucket. Extending classes can override this method to tailor this
172+
* amount for the specific kind of failure.
190173
*/
191174
protected int exceptionCost(RefreshRetryTokenRequest request) {
192175
if (circuitBreakerEnabled) {

core/retries/src/main/java/software/amazon/awssdk/retries/internal/DefaultAdaptiveRetryStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
@SdkInternalApi
3232
public final class DefaultAdaptiveRetryStrategy
33-
extends BaseRetryStrategy<AdaptiveRetryStrategy.Builder, AdaptiveRetryStrategy> implements AdaptiveRetryStrategy {
33+
extends BaseRetryStrategy implements AdaptiveRetryStrategy {
3434

3535
private static final Logger LOG = Logger.loggerFor(DefaultAdaptiveRetryStrategy.class);
3636
private final Predicate<Throwable> treatAsThrottling;

core/retries/src/main/java/software/amazon/awssdk/retries/internal/DefaultLegacyRetryStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
@SdkInternalApi
2929
public final class DefaultLegacyRetryStrategy
30-
extends BaseRetryStrategy<LegacyRetryStrategy.Builder, LegacyRetryStrategy> implements LegacyRetryStrategy {
30+
extends BaseRetryStrategy implements LegacyRetryStrategy {
3131
private static final Logger LOG = Logger.loggerFor(LegacyRetryStrategy.class);
3232
private final BackoffStrategy throttlingBackoffStrategy;
3333
private final int throttlingExceptionCost;

core/retries/src/main/java/software/amazon/awssdk/retries/internal/DefaultStandardRetryStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
@SdkInternalApi
2626
public final class DefaultStandardRetryStrategy
27-
extends BaseRetryStrategy<StandardRetryStrategy.Builder, StandardRetryStrategy> implements StandardRetryStrategy {
27+
extends BaseRetryStrategy implements StandardRetryStrategy {
2828
private static final Logger LOG = Logger.loggerFor(DefaultStandardRetryStrategy.class);
2929

3030
DefaultStandardRetryStrategy(Builder builder) {

core/retries/src/test/java/software/amazon/awssdk/retries/internal/RetryStrategyCircuitBreakerRemembersStateTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ void circuitBreakerRemembersState(Function<String, TestCase> defaultTestCaseSupp
4949

5050
// The test case will throw twice and then succeed, so each run will withdraw 2 * TEST_EXCEPTION_COST and deposit back
5151
// TEST_EXCEPTION_COST.
52-
RetryStrategy<?, ?> strategy = testCase.builder.build();
52+
RetryStrategy strategy = testCase.builder.build();
5353
int total = TEST_MAX;
5454
for (int idx = 0; idx < 9; idx++) {
5555
String name = testCase.name + " round " + idx;

core/retries/src/test/java/software/amazon/awssdk/retries/internal/RetryStrategyCommonTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,11 +230,11 @@ public TestCase expectLastRecordedDelay(Duration delay) {
230230
}
231231

232232
public void run() {
233-
RetryStrategy<?, ?> strategy = builder.build();
233+
RetryStrategy strategy = builder.build();
234234
runTestCase(this, strategy);
235235
}
236236

237-
public static void runTestCase(TestCase testCase, RetryStrategy<?, ?> strategy) {
237+
public static void runTestCase(TestCase testCase, RetryStrategy strategy) {
238238
AcquireInitialTokenResponse res = strategy.acquireInitialToken(AcquireInitialTokenRequestImpl.create(testCase.scope));
239239
RetryToken token = res.token();
240240
testCase.succeeded = false;

core/sdk-core/src/it/java/software/amazon/awssdk/core/http/AmazonHttpClientSslHandshakeTimeoutTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class AmazonHttpClientSslHandshakeTimeoutTest extends UnresponsiveMockSer
4848
@Test(timeout = 60 * 1000)
4949
public void testSslHandshakeTimeout() {
5050
AmazonSyncHttpClient httpClient = HttpTestUtils.testClientBuilder()
51-
.retryStrategy(DefaultRetryStrategy.none())
51+
.retryStrategy(DefaultRetryStrategy.doNotRetry())
5252
.httpClient(ApacheHttpClient.builder()
5353
.socketTimeout(CLIENT_SOCKET_TO)
5454
.build())

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public static void tearDown() {
5757
public void leasing_a_new_connection_fails_with_connection_pool_timeout() {
5858

5959
AmazonSyncHttpClient httpClient = HttpTestUtils.testClientBuilder()
60-
.retryStrategy(DefaultRetryStrategy.none())
60+
.retryStrategy(DefaultRetryStrategy.doNotRetry())
6161
.httpClient(ApacheHttpClient.builder()
6262
.connectionTimeout(Duration.ofMillis(100))
6363
.maxConnections(1)

core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ protected SdkClientConfiguration invokePlugins(SdkClientConfiguration config) {
368368
return config;
369369
}
370370

371-
private String resolveRetryMode(RetryPolicy retryPolicy, RetryStrategy<?, ?> retryStrategy) {
371+
private String resolveRetryMode(RetryPolicy retryPolicy, RetryStrategy retryStrategy) {
372372
if (retryPolicy != null) {
373373
return retryPolicy.retryMode().toString();
374374
}
@@ -394,7 +394,7 @@ private String resolveClientUserAgent(LazyValueSource config) {
394394
retryMode);
395395
}
396396

397-
private RetryStrategy<?, ?> resolveRetryStrategy(LazyValueSource config) {
397+
private RetryStrategy resolveRetryStrategy(LazyValueSource config) {
398398
RetryMode retryMode = RetryMode.resolver()
399399
.profileFile(config.get(PROFILE_FILE_SUPPLIER))
400400
.profileName(config.get(PROFILE_NAME))

0 commit comments

Comments
 (0)