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