This is an automated email from the ASF dual-hosted git repository.

amoghj pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/main by this push:
     new 738c7a4753 AWS: Set retry policy on glue and dynamo clients (#15094)
738c7a4753 is described below

commit 738c7a4753552ff990401a5f736fa29ad26d5c60
Author: Edward Gao <[email protected]>
AuthorDate: Sat Jan 31 08:11:04 2026 -0800

    AWS: Set retry policy on glue and dynamo clients (#15094)
---
 .../iceberg/aws/AssumeRoleAwsClientFactory.java    |  2 ++
 .../org/apache/iceberg/aws/AwsClientFactories.java |  2 ++
 .../apache/iceberg/aws/TestAwsClientFactories.java | 40 ++++++++++++++++++++++
 3 files changed, 44 insertions(+)

diff --git 
a/aws/src/main/java/org/apache/iceberg/aws/AssumeRoleAwsClientFactory.java 
b/aws/src/main/java/org/apache/iceberg/aws/AssumeRoleAwsClientFactory.java
index 59a4d8d3ac..dd955d5797 100644
--- a/aws/src/main/java/org/apache/iceberg/aws/AssumeRoleAwsClientFactory.java
+++ b/aws/src/main/java/org/apache/iceberg/aws/AssumeRoleAwsClientFactory.java
@@ -81,6 +81,7 @@ public class AssumeRoleAwsClientFactory implements 
AwsClientFactory {
     return GlueClient.builder()
         .applyMutation(this::applyAssumeRoleConfigurations)
         .applyMutation(httpClientProperties::applyHttpClientConfigurations)
+        .applyMutation(awsClientProperties::applyRetryConfigurations)
         .build();
   }
 
@@ -99,6 +100,7 @@ public class AssumeRoleAwsClientFactory implements 
AwsClientFactory {
         .applyMutation(this::applyAssumeRoleConfigurations)
         .applyMutation(httpClientProperties::applyHttpClientConfigurations)
         .applyMutation(awsProperties::applyDynamoDbEndpointConfigurations)
+        .applyMutation(awsClientProperties::applyRetryConfigurations)
         .build();
   }
 
diff --git a/aws/src/main/java/org/apache/iceberg/aws/AwsClientFactories.java 
b/aws/src/main/java/org/apache/iceberg/aws/AwsClientFactories.java
index 0ee4bf26e6..e6eb8d28d0 100644
--- a/aws/src/main/java/org/apache/iceberg/aws/AwsClientFactories.java
+++ b/aws/src/main/java/org/apache/iceberg/aws/AwsClientFactories.java
@@ -148,6 +148,7 @@ public class AwsClientFactories {
           .applyMutation(httpClientProperties::applyHttpClientConfigurations)
           .applyMutation(awsProperties::applyGlueEndpointConfigurations)
           
.applyMutation(awsClientProperties::applyClientCredentialConfigurations)
+          .applyMutation(awsClientProperties::applyRetryConfigurations)
           .build();
     }
 
@@ -169,6 +170,7 @@ public class AwsClientFactories {
           .applyMutation(httpClientProperties::applyHttpClientConfigurations)
           
.applyMutation(awsClientProperties::applyClientCredentialConfigurations)
           .applyMutation(awsProperties::applyDynamoDbEndpointConfigurations)
+          .applyMutation(awsClientProperties::applyRetryConfigurations)
           .build();
     }
 
diff --git 
a/aws/src/test/java/org/apache/iceberg/aws/TestAwsClientFactories.java 
b/aws/src/test/java/org/apache/iceberg/aws/TestAwsClientFactories.java
index fe95f93646..94ef60e05d 100644
--- a/aws/src/test/java/org/apache/iceberg/aws/TestAwsClientFactories.java
+++ b/aws/src/test/java/org/apache/iceberg/aws/TestAwsClientFactories.java
@@ -23,6 +23,7 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.Optional;
 import org.apache.iceberg.TestHelpers;
 import org.apache.iceberg.aws.lakeformation.LakeFormationAwsClientFactory;
 import org.apache.iceberg.aws.s3.S3FileIOProperties;
@@ -38,7 +39,10 @@ import org.junit.jupiter.params.provider.MethodSource;
 import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
 import software.amazon.awssdk.auth.credentials.AwsCredentials;
 import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
+import software.amazon.awssdk.awscore.AwsClient;
 import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.retries.api.RetryStrategy;
+import software.amazon.awssdk.retries.internal.DefaultAdaptiveRetryStrategy;
 import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
 import software.amazon.awssdk.services.glue.GlueClient;
 import software.amazon.awssdk.services.glue.model.GetTablesRequest;
@@ -245,6 +249,42 @@ public class TestAwsClientFactories {
     testProviderAndAssertThrownBy(providerClassName, containsMessage);
   }
 
+  @Test
+  public void testGlueClientSetsAdaptiveRetryPolicy() {
+    AwsClientFactory factory =
+        
getAwsClientFactoryByCredentialsProvider(DummyValidProvider.class.getName());
+    GlueClient glueClient = factory.glue();
+    assertAwsClientSetsAdaptiveRetryPolicy(glueClient);
+  }
+
+  @Test
+  public void testKmsClientSetsAdaptiveRetryPolicy() {
+    AwsClientFactory factory =
+        
getAwsClientFactoryByCredentialsProvider(DummyValidProvider.class.getName());
+    KmsClient kmsClient = factory.kms();
+    assertAwsClientSetsAdaptiveRetryPolicy(kmsClient);
+  }
+
+  @Test
+  public void testDynamoClientSetsAdaptiveRetryPolicy() {
+    AwsClientFactory factory =
+        
getAwsClientFactoryByCredentialsProvider(DummyValidProvider.class.getName());
+    DynamoDbClient dynamoClient = factory.dynamo();
+    assertAwsClientSetsAdaptiveRetryPolicy(dynamoClient);
+  }
+
+  /**
+   * Extract the retry strategy from an AwsClient object, then assert that 
it's set to the correct
+   * strategy. This enforces that we correctly applied the retry 
configurations to the client
+   * object.
+   */
+  private void assertAwsClientSetsAdaptiveRetryPolicy(AwsClient client) {
+    Optional<RetryStrategy> retryStrategy =
+        
client.serviceClientConfiguration().overrideConfiguration().retryStrategy();
+    assertThat(retryStrategy).isPresent();
+    
assertThat(retryStrategy.get()).isInstanceOf(DefaultAdaptiveRetryStrategy.class);
+  }
+
   private void testProviderAndAssertThrownBy(String providerClassName, String 
containsMessage) {
     AwsClientFactory defaultAwsClientFactory =
         getAwsClientFactoryByCredentialsProvider(providerClassName);

Reply via email to