diff --git a/aws/src/main/java/org/apache/iceberg/aws/s3/S3FileIOProperties.java b/aws/src/main/java/org/apache/iceberg/aws/s3/S3FileIOProperties.java index 6813913a4db0..4ab1514a22d5 100644 --- a/aws/src/main/java/org/apache/iceberg/aws/s3/S3FileIOProperties.java +++ b/aws/src/main/java/org/apache/iceberg/aws/s3/S3FileIOProperties.java @@ -899,9 +899,14 @@ public void applyEndpointConfigurations(T builder) { * */ public void applyRetryConfigurations(T builder) { + ClientOverrideConfiguration.Builder configBuilder = + null != builder.overrideConfiguration() + ? builder.overrideConfiguration().toBuilder() + : ClientOverrideConfiguration.builder(); + builder.overrideConfiguration( - config -> - config.retryPolicy( + configBuilder + .retryPolicy( // Use a retry strategy which will persistently retry throttled exceptions with // exponential backoff, to give S3 a chance to autoscale. // LEGACY mode works best here, as it will allow throttled exceptions to use all of @@ -945,7 +950,8 @@ public void applyRetryConfigurations(T builder) { return 5; }) .build()) - .build())); + .build()) + .build()); } /** diff --git a/aws/src/test/java/org/apache/iceberg/aws/TestS3FileIOProperties.java b/aws/src/test/java/org/apache/iceberg/aws/TestS3FileIOProperties.java index 92ed3648bcfc..e2499e947617 100644 --- a/aws/src/test/java/org/apache/iceberg/aws/TestS3FileIOProperties.java +++ b/aws/src/test/java/org/apache/iceberg/aws/TestS3FileIOProperties.java @@ -36,6 +36,7 @@ import software.amazon.awssdk.auth.credentials.AwsSessionCredentials; import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption; +import software.amazon.awssdk.core.retry.RetryPolicy; import software.amazon.awssdk.core.signer.Signer; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.S3ClientBuilder; @@ -239,7 +240,7 @@ public void testS3RemoteSigningEnabled() { } @Test - public void s3RemoteSigningEnabledWithUserAgent() { + public void s3RemoteSigningEnabledWithUserAgentAndRetryPolicy() { String uri = "http://localhost:12345"; Map properties = ImmutableMap.of( @@ -249,6 +250,7 @@ public void s3RemoteSigningEnabledWithUserAgent() { s3Properties.applySignerConfiguration(builder); s3Properties.applyUserAgentConfigurations(builder); + s3Properties.applyRetryConfigurations(builder); Optional userAgent = builder.overrideConfiguration().advancedOption(SdkAdvancedClientOption.USER_AGENT_PREFIX); @@ -260,6 +262,9 @@ public void s3RemoteSigningEnabledWithUserAgent() { S3V4RestSignerClient signerClient = (S3V4RestSignerClient) signer.get(); assertThat(signerClient.baseSignerUri()).isEqualTo(uri); assertThat(signerClient.properties()).isEqualTo(properties); + + Optional retryPolicy = builder.overrideConfiguration().retryPolicy(); + assertThat(retryPolicy).isPresent().get().isInstanceOf(RetryPolicy.class); } @Test