Skip to content

Commit 442a13c

Browse files
committed
Expose StandardRetryOptions in the S3CrtClient Interface
1 parent 6cfa6fc commit 442a13c

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/crt/S3CrtAsyncHttpClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ private S3CrtAsyncHttpClient(Builder builder) {
7878
.withInitialReadWindowSize(initialWindowSize)
7979
.withReadBackpressureEnabled(true);
8080

81+
if (s3NativeClientConfiguration.standardRetryOptions() != null) {
82+
this.s3ClientOptions.withStandardRetryOptions(s3NativeClientConfiguration.standardRetryOptions());
83+
}
8184
Optional.ofNullable(s3NativeClientConfiguration.proxyOptions()).ifPresent(s3ClientOptions::withProxyOptions);
8285
Optional.ofNullable(s3NativeClientConfiguration.connectionTimeout())
8386
.map(Duration::toMillis)

services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/crt/S3NativeClientConfiguration.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import software.amazon.awssdk.crt.http.HttpMonitoringOptions;
2828
import software.amazon.awssdk.crt.http.HttpProxyOptions;
2929
import software.amazon.awssdk.crt.io.ClientBootstrap;
30+
import software.amazon.awssdk.crt.io.StandardRetryOptions;
3031
import software.amazon.awssdk.crt.io.TlsCipherPreference;
3132
import software.amazon.awssdk.crt.io.TlsContext;
3233
import software.amazon.awssdk.crt.io.TlsContextOptions;
@@ -43,6 +44,7 @@ public class S3NativeClientConfiguration implements SdkAutoCloseable {
4344
private static final long DEFAULT_TARGET_THROUGHPUT_IN_GBPS = 10;
4445

4546
private final String signingRegion;
47+
private final StandardRetryOptions standardRetryOptions;
4648
private final ClientBootstrap clientBootstrap;
4749
private final CrtCredentialsProviderAdapter credentialProviderAdapter;
4850
private final CredentialsProvider credentialsProvider;
@@ -97,6 +99,7 @@ public S3NativeClientConfiguration(Builder builder) {
9799
this.connectionTimeout = null;
98100
this.httpMonitoringOptions = null;
99101
}
102+
this.standardRetryOptions = builder.standardRetryOptions;
100103
}
101104

102105
public HttpMonitoringOptions httpMonitoringOptions() {
@@ -140,6 +143,10 @@ public int maxConcurrency() {
140143
return maxConcurrency;
141144
}
142145

146+
public StandardRetryOptions standardRetryOptions() {
147+
return standardRetryOptions;
148+
}
149+
143150
public URI endpointOverride() {
144151
return endpointOverride;
145152
}
@@ -169,6 +176,7 @@ public static final class Builder {
169176
private URI endpointOverride;
170177
private Boolean checksumValidationEnabled;
171178
private S3CrtHttpConfiguration httpConfiguration;
179+
private StandardRetryOptions standardRetryOptions;
172180

173181
private Builder() {
174182
}
@@ -224,5 +232,10 @@ public Builder httpConfiguration(S3CrtHttpConfiguration httpConfiguration) {
224232
this.httpConfiguration = httpConfiguration;
225233
return this;
226234
}
235+
236+
public Builder standardRetryOptions(StandardRetryOptions standardRetryOptions) {
237+
this.standardRetryOptions = standardRetryOptions;
238+
return this;
239+
}
227240
}
228241
}

services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/crt/S3CrtAsyncHttpClientTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.mockito.Mockito;
3838
import software.amazon.awssdk.core.interceptor.trait.HttpChecksum;
3939
import software.amazon.awssdk.crt.http.HttpRequest;
40+
import software.amazon.awssdk.crt.io.ExponentialBackoffRetryOptions;
41+
import software.amazon.awssdk.crt.io.StandardRetryOptions;
4042
import software.amazon.awssdk.crt.s3.ChecksumAlgorithm;
4143
import software.amazon.awssdk.crt.s3.S3Client;
4244
import software.amazon.awssdk.crt.s3.S3ClientOptions;
@@ -314,6 +316,9 @@ void build_shouldPassThroughParameters() {
314316
S3NativeClientConfiguration.builder()
315317
.maxConcurrency(100)
316318
.signingRegion("us-west-2")
319+
.standardRetryOptions(
320+
new StandardRetryOptions()
321+
.withBackoffRetryOptions(new ExponentialBackoffRetryOptions().withMaxRetries(7)))
317322
.httpConfiguration(S3CrtHttpConfiguration.builder()
318323
.connectionTimeout(Duration.ofSeconds(1))
319324
.connectionHealthConfiguration(c -> c.minimumThroughputInBps(1024L)
@@ -325,6 +330,7 @@ void build_shouldPassThroughParameters() {
325330
(S3CrtAsyncHttpClient) S3CrtAsyncHttpClient.builder().s3ClientConfiguration(configuration).build();
326331
S3ClientOptions clientOptions = client.s3ClientOptions();
327332
assertThat(clientOptions.getConnectTimeoutMs()).isEqualTo(1000);
333+
assertThat(clientOptions.getStandardRetryOptions().getBackoffRetryOptions().getMaxRetries()).isEqualTo(7);
328334
assertThat(clientOptions.getMaxConnections()).isEqualTo(100);
329335
assertThat(clientOptions.getMonitoringOptions()).satisfies(options -> {
330336
assertThat(options.getMinThroughputBytesPerSecond()).isEqualTo(1024);

0 commit comments

Comments
 (0)