Skip to content

Commit 2f4fccc

Browse files
committed
Add retry strategy for throttling in clients
This is expected for Review Readiness of the Uluru handlers.
1 parent fcf83fe commit 2f4fccc

File tree

3 files changed

+69
-5
lines changed

3 files changed

+69
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,36 @@
11
package software.amazon.transfer.server.clients;
22

3+
import java.time.Duration;
4+
5+
import software.amazon.awssdk.awscore.retry.AwsRetryStrategy;
6+
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
7+
import software.amazon.awssdk.core.internal.retry.SdkDefaultRetrySetting;
8+
import software.amazon.awssdk.retries.api.BackoffStrategy;
9+
import software.amazon.awssdk.retries.api.RetryStrategy;
310
import software.amazon.awssdk.services.transfer.TransferClient;
411
import software.amazon.cloudformation.LambdaWrapper;
512

613
/** Create a TransferClient instance. */
714
public class ClientBuilder {
15+
private static final BackoffStrategy TRANSFER_BACKOFF_THROTTLING_STRATEGY =
16+
BackoffStrategy.exponentialDelay(Duration.ofMillis(2000), SdkDefaultRetrySetting.MAX_BACKOFF);
17+
18+
private static final RetryStrategy TRANSFER_RETRY_STRATEGY = AwsRetryStrategy.adaptiveRetryStrategy().toBuilder()
19+
.backoffStrategy(TRANSFER_BACKOFF_THROTTLING_STRATEGY)
20+
.maxAttempts(4)
21+
.build();
22+
823
/**
924
* Returns the TransferClient instance.
1025
*
1126
* @return the TransferClient instance.
1227
*/
1328
public static TransferClient getClient() {
14-
return TransferClient.builder().httpClient(LambdaWrapper.HTTP_CLIENT).build();
29+
return TransferClient.builder()
30+
.httpClient(LambdaWrapper.HTTP_CLIENT)
31+
.overrideConfiguration(ClientOverrideConfiguration.builder()
32+
.retryStrategy(TRANSFER_RETRY_STRATEGY)
33+
.build())
34+
.build();
1535
}
1636
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,36 @@
11
package software.amazon.transfer.server.clients;
22

3+
import java.time.Duration;
4+
5+
import software.amazon.awssdk.awscore.retry.AwsRetryStrategy;
6+
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
7+
import software.amazon.awssdk.core.internal.retry.SdkDefaultRetrySetting;
8+
import software.amazon.awssdk.retries.api.BackoffStrategy;
9+
import software.amazon.awssdk.retries.api.RetryStrategy;
310
import software.amazon.awssdk.services.ec2.Ec2Client;
411
import software.amazon.cloudformation.LambdaWrapper;
512

613
/** Create an Ec2Client instance. */
714
public class Ec2ClientBuilder {
15+
private static final BackoffStrategy EC2_BACKOFF_THROTTLING_STRATEGY =
16+
BackoffStrategy.exponentialDelay(Duration.ofMillis(2000), SdkDefaultRetrySetting.MAX_BACKOFF);
17+
18+
private static final RetryStrategy EC2_RETRY_STRATEGY = AwsRetryStrategy.adaptiveRetryStrategy().toBuilder()
19+
.backoffStrategy(EC2_BACKOFF_THROTTLING_STRATEGY)
20+
.maxAttempts(4)
21+
.build();
22+
823
/**
924
* Returns the Ec2Client instance.
1025
*
1126
* @return the Ec2Client instance.
1227
*/
1328
public static Ec2Client getClient() {
14-
return Ec2Client.builder().httpClient(LambdaWrapper.HTTP_CLIENT).build();
29+
return Ec2Client.builder()
30+
.httpClient(LambdaWrapper.HTTP_CLIENT)
31+
.overrideConfiguration(ClientOverrideConfiguration.builder()
32+
.retryStrategy(EC2_RETRY_STRATEGY)
33+
.build())
34+
.build();
1535
}
1636
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,36 @@
11
package software.amazon.transfer.user.clients;
22

3+
import java.time.Duration;
4+
5+
import software.amazon.awssdk.awscore.retry.AwsRetryStrategy;
6+
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
7+
import software.amazon.awssdk.core.internal.retry.SdkDefaultRetrySetting;
8+
import software.amazon.awssdk.retries.api.BackoffStrategy;
9+
import software.amazon.awssdk.retries.api.RetryStrategy;
310
import software.amazon.awssdk.services.transfer.TransferClient;
411
import software.amazon.cloudformation.LambdaWrapper;
512

6-
public final class ClientBuilder {
7-
private ClientBuilder() {}
13+
/** Create a TransferClient instance. */
14+
public class ClientBuilder {
15+
private static final BackoffStrategy TRANSFER_BACKOFF_THROTTLING_STRATEGY =
16+
BackoffStrategy.exponentialDelay(Duration.ofMillis(2000), SdkDefaultRetrySetting.MAX_BACKOFF);
17+
18+
private static final RetryStrategy TRANSFER_RETRY_STRATEGY = AwsRetryStrategy.adaptiveRetryStrategy().toBuilder()
19+
.backoffStrategy(TRANSFER_BACKOFF_THROTTLING_STRATEGY)
20+
.maxAttempts(4)
21+
.build();
822

23+
/**
24+
* Returns the TransferClient instance.
25+
*
26+
* @return the TransferClient instance.
27+
*/
928
public static TransferClient getClient() {
10-
return TransferClient.builder().httpClient(LambdaWrapper.HTTP_CLIENT).build();
29+
return TransferClient.builder()
30+
.httpClient(LambdaWrapper.HTTP_CLIENT)
31+
.overrideConfiguration(ClientOverrideConfiguration.builder()
32+
.retryStrategy(TRANSFER_RETRY_STRATEGY)
33+
.build())
34+
.build();
1135
}
1236
}

0 commit comments

Comments
 (0)