Skip to content

Commit 60d671f

Browse files
Gezi-lzqCopilot
andauthored
feat(catalog): avoid static global credentials provider (#2684) (#2686)
* feat(catalog): Avoid static global credentials provider Refactors `CredentialProviderHolder` to prevent "Connection Pool Shutdown" errors by creating a new provider instance for each catalog. Previously, a single static `AwsCredentialsProvider` was shared globally. If this provider was closed, it would affect all subsequent operations. By creating a new provider on each `create()` call from Iceberg, this change removes the global singleton and isolates provider instances. Fixes #2680 * Update core/src/main/java/kafka/automq/table/CredentialProviderHolder.java * fix(credentials): update DefaultCredentialsProvider instantiation to use builder pattern --------- Signed-off-by: Gezi-lzq <[email protected]> Co-authored-by: Copilot <[email protected]>
1 parent 5a8af4b commit 60d671f

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

core/src/main/java/kafka/automq/table/CredentialProviderHolder.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,18 @@
3636
public class CredentialProviderHolder implements AwsCredentialsProvider {
3737
private static Function<BucketURI, AwsCredentialsProvider> providerSupplier = bucketURI -> newCredentialsProviderChain(
3838
credentialsProviders(bucketURI));
39-
private static AwsCredentialsProvider provider;
39+
private static BucketURI bucketURI;
4040

4141
public static void setup(Function<BucketURI, AwsCredentialsProvider> providerSupplier) {
4242
CredentialProviderHolder.providerSupplier = providerSupplier;
4343
}
4444

4545
public static void setup(BucketURI bucketURI) {
46-
CredentialProviderHolder.provider = providerSupplier.apply(bucketURI);
46+
CredentialProviderHolder.bucketURI = bucketURI;
4747
}
4848

4949
private static List<AwsCredentialsProvider> credentialsProviders(BucketURI bucketURI) {
50-
return List.of(new AutoMQStaticCredentialsProvider(bucketURI), DefaultCredentialsProvider.create());
50+
return List.of(new AutoMQStaticCredentialsProvider(bucketURI), DefaultCredentialsProvider.builder().build());
5151
}
5252

5353
private static AwsCredentialsProvider newCredentialsProviderChain(
@@ -62,7 +62,10 @@ private static AwsCredentialsProvider newCredentialsProviderChain(
6262

6363
// iceberg will invoke create with reflection.
6464
public static AwsCredentialsProvider create() {
65-
return provider;
65+
if (bucketURI == null) {
66+
throw new IllegalStateException("BucketURI must be set before calling create(). Please invoke setup(BucketURI) first.");
67+
}
68+
return providerSupplier.apply(bucketURI);
6669
}
6770

6871
@Override

0 commit comments

Comments
 (0)