From 56d66601cdbdba8d305664b09114ffccfd85f59a Mon Sep 17 00:00:00 2001 From: KaimingWan Date: Fri, 19 Jan 2024 10:53:22 +0800 Subject: [PATCH 1/2] feat: add credential provider holder Signed-off-by: KaimingWan --- build.gradle | 4 +++ gradle/dependencies.gradle | 4 ++- .../sdk/auth/CredentialsProviderHolder.java | 32 +++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java diff --git a/build.gradle b/build.gradle index f8d5531588..a73b2d8abd 100644 --- a/build.gradle +++ b/build.gradle @@ -1852,6 +1852,10 @@ project(':s3shell-kafka-sdk') { checkstyle { configProperties = checkstyleConfigProperties("import-control-automq.xml") } + + dependencies { + compileOnly libs.awsSdkAuth + } } project(':tools') { diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 1790ce9d36..9f4c99ed64 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -133,7 +133,8 @@ versions += [ s3stream: "0.17.0-SNAPSHOT", opentelemetry: "1.32.0", opentelemetryAlpha: "1.32.0-alpha", - oshi: "6.4.7" + oshi: "6.4.7", + awsSdkAuth:"2.20.127", ] libs += [ activation: "javax.activation:activation:$versions.activation", @@ -231,6 +232,7 @@ libs += [ commonMath3: "org.apache.commons:commons-math3:$versions.commonMath3", nettyHttp2: "io.netty:netty-codec-http2:$versions.netty", s3stream: "com.automq.elasticstream:s3stream:$versions.s3stream", + awsSdkAuth: "software.amazon.awssdk:auth:$versions.awsSdkAuth", opentelemetryJava8: "io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java8:$versions.opentelemetryAlpha", opentelemetryOshi: "io.opentelemetry.instrumentation:opentelemetry-oshi:$versions.opentelemetryAlpha", opentelemetrySdk: "io.opentelemetry:opentelemetry-sdk:$versions.opentelemetry", diff --git a/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java b/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java new file mode 100644 index 0000000000..2025c3497f --- /dev/null +++ b/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.automq.s3shell.sdk.auth; + +import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; + +public class CredentialsProviderHolder { + // This is a multi-cloud aware and auth-method-aware credentials provider. Invoker just use it directly. + private static AwsCredentialsProvider awsCredentialsProvider; + + public static void create(AwsCredentialsProvider awsCredentialsProvider) { + CredentialsProviderHolder.awsCredentialsProvider = awsCredentialsProvider; + } + + public static AwsCredentialsProvider getAwsCredentialsProvider() { + return awsCredentialsProvider; + } +} From bc05408abc023a61f77ac730d714de9532b57d63 Mon Sep 17 00:00:00 2001 From: KaimingWan Date: Fri, 19 Jan 2024 10:56:33 +0800 Subject: [PATCH 2/2] feat: make credential provider holder singleton Signed-off-by: KaimingWan --- .../sdk/auth/CredentialsProviderHolder.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java b/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java index 2025c3497f..3c20c49a1f 100644 --- a/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java +++ b/s3shell-kafka-sdk/src/main/java/com/automq/s3shell/sdk/auth/CredentialsProviderHolder.java @@ -19,14 +19,24 @@ import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; public class CredentialsProviderHolder { - // This is a multi-cloud aware and auth-method-aware credentials provider. Invoker just use it directly. - private static AwsCredentialsProvider awsCredentialsProvider; - public static void create(AwsCredentialsProvider awsCredentialsProvider) { - CredentialsProviderHolder.awsCredentialsProvider = awsCredentialsProvider; + //global singleton credential provider + private static volatile AwsCredentialsProvider awsCredentialsProvider; + + private CredentialsProviderHolder() { } public static AwsCredentialsProvider getAwsCredentialsProvider() { + if (awsCredentialsProvider == null) { + throw new IllegalStateException("AwsCredentialsProvider has not been initialized"); + } return awsCredentialsProvider; } + + public static synchronized void create(AwsCredentialsProvider newAwsCredentialsProvider) { + if (awsCredentialsProvider != null) { + throw new IllegalStateException("AwsCredentialsProvider is already initialized"); + } + awsCredentialsProvider = newAwsCredentialsProvider; + } }