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);