You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by et...@apache.org on 2023/10/16 06:40:11 UTC
[iceberg] 01/01: AWS: avoid static global credentials provider which doesn't play well with lifecycle management (#8677)
This is an automated email from the ASF dual-hosted git repository.
etudenhoefner pushed a commit to branch aws-global-creds-1.4.1
in repository https://gitbox.apache.org/repos/asf/iceberg.git
commit 9ef3d6857538390b20ddf86db7c44ed40200947a
Author: Kristin Cowalcijk <bo...@wherobots.com>
AuthorDate: Mon Oct 2 09:55:31 2023 +0800
AWS: avoid static global credentials provider which doesn't play well with lifecycle management (#8677)
---
.../java/org/apache/iceberg/aws/AwsClientFactories.java | 3 ++-
.../java/org/apache/iceberg/aws/AwsClientProperties.java | 3 ++-
aws/src/main/java/org/apache/iceberg/aws/AwsProperties.java | 3 ++-
.../org/apache/iceberg/aws/AwsClientPropertiesTest.java | 13 +++++++++++++
4 files changed, 19 insertions(+), 3 deletions(-)
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 1ec9822254..501c7ca8b3 100644
--- a/aws/src/main/java/org/apache/iceberg/aws/AwsClientFactories.java
+++ b/aws/src/main/java/org/apache/iceberg/aws/AwsClientFactories.java
@@ -226,7 +226,8 @@ public class AwsClientFactories {
AwsSessionCredentials.create(accessKeyId, secretAccessKey, sessionToken));
}
} else {
- return DefaultCredentialsProvider.create();
+ // Create a new credential provider for each client
+ return DefaultCredentialsProvider.builder().build();
}
}
}
diff --git a/aws/src/main/java/org/apache/iceberg/aws/AwsClientProperties.java b/aws/src/main/java/org/apache/iceberg/aws/AwsClientProperties.java
index d85764c499..1d03a0acbd 100644
--- a/aws/src/main/java/org/apache/iceberg/aws/AwsClientProperties.java
+++ b/aws/src/main/java/org/apache/iceberg/aws/AwsClientProperties.java
@@ -150,7 +150,8 @@ public class AwsClientProperties implements Serializable {
return credentialsProvider(this.clientCredentialsProvider);
}
- return DefaultCredentialsProvider.create();
+ // Create a new credential provider for each client
+ return DefaultCredentialsProvider.builder().build();
}
private AwsCredentialsProvider credentialsProvider(String credentialsProviderClass) {
diff --git a/aws/src/main/java/org/apache/iceberg/aws/AwsProperties.java b/aws/src/main/java/org/apache/iceberg/aws/AwsProperties.java
index 7bc2ba70dc..849445f86f 100644
--- a/aws/src/main/java/org/apache/iceberg/aws/AwsProperties.java
+++ b/aws/src/main/java/org/apache/iceberg/aws/AwsProperties.java
@@ -485,7 +485,8 @@ public class AwsProperties implements Serializable {
return credentialsProvider(this.clientCredentialsProvider);
}
- return DefaultCredentialsProvider.create();
+ // Create a new credential provider for each client
+ return DefaultCredentialsProvider.builder().build();
}
private AwsCredentialsProvider credentialsProvider(String credentialsProviderClass) {
diff --git a/aws/src/test/java/org/apache/iceberg/aws/AwsClientPropertiesTest.java b/aws/src/test/java/org/apache/iceberg/aws/AwsClientPropertiesTest.java
index b763def516..7f57fbcb2d 100644
--- a/aws/src/test/java/org/apache/iceberg/aws/AwsClientPropertiesTest.java
+++ b/aws/src/test/java/org/apache/iceberg/aws/AwsClientPropertiesTest.java
@@ -61,6 +61,19 @@ public class AwsClientPropertiesTest {
.isTrue();
}
+ @Test
+ public void testCreatesNewInstanceOfDefaultCredentialsConfiguration() {
+ AwsClientProperties awsClientProperties = new AwsClientProperties();
+ AwsCredentialsProvider credentialsProvider =
+ awsClientProperties.credentialsProvider(null, null, null);
+ AwsCredentialsProvider credentialsProvider2 =
+ awsClientProperties.credentialsProvider(null, null, null);
+
+ Assertions.assertThat(credentialsProvider)
+ .withFailMessage("Should create a new instance in each call")
+ .isNotSameAs(credentialsProvider2);
+ }
+
@Test
public void testBasicCredentialsConfiguration() {
AwsClientProperties awsClientProperties = new AwsClientProperties();