This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 686cbffd8a799d77fe993eeac64d6161a301abb4 Author: slothever <18522955+w...@users.noreply.github.com> AuthorDate: Wed Mar 6 20:40:10 2024 +0800 [fix](multi-catalog) fix iceberg defalut credentials proviers (#31704) --- .../doris/datasource/iceberg/IcebergExternalCatalog.java | 9 +++++++++ .../datasource/iceberg/IcebergGlueExternalCatalog.java | 5 ++++- .../datasource/iceberg/IcebergHMSExternalCatalog.java | 1 + .../datasource/iceberg/IcebergHadoopExternalCatalog.java | 1 + .../datasource/iceberg/IcebergRestExternalCatalog.java | 3 +-- .../doris/datasource/property/PropertyConverter.java | 16 +++++++++++++--- .../datasource/property/constants/S3Properties.java | 8 ++++++++ 7 files changed, 37 insertions(+), 6 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalCatalog.java index 426657bc539..e5b8246571c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalCatalog.java @@ -21,10 +21,14 @@ import org.apache.doris.datasource.ExternalCatalog; import org.apache.doris.datasource.InitCatalogLog; import org.apache.doris.datasource.SessionContext; import org.apache.doris.datasource.operations.ExternalMetadataOperations; +import org.apache.doris.datasource.property.PropertyConverter; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.s3a.Constants; import org.apache.iceberg.catalog.Catalog; import java.util.List; +import java.util.Map; public abstract class IcebergExternalCatalog extends ExternalCatalog { @@ -76,4 +80,9 @@ public abstract class IcebergExternalCatalog extends ExternalCatalog { makeSureInitialized(); return metadataOps.listTableNames(dbName); } + + protected void initS3Param(Configuration conf) { + Map<String, String> properties = catalogProperty.getHadoopProperties(); + conf.set(Constants.AWS_CREDENTIALS_PROVIDER, PropertyConverter.getAWSCredentialsProviders(properties)); + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergGlueExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergGlueExternalCatalog.java index 08e7fe044ba..9f3e05757c9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergGlueExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergGlueExternalCatalog.java @@ -21,6 +21,7 @@ import org.apache.doris.datasource.CatalogProperty; import org.apache.doris.datasource.property.PropertyConverter; import org.apache.doris.datasource.property.constants.S3Properties; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.s3a.Constants; import org.apache.iceberg.CatalogProperties; import org.apache.iceberg.aws.glue.GlueCatalog; @@ -45,7 +46,9 @@ public class IcebergGlueExternalCatalog extends IcebergExternalCatalog { protected void initCatalog() { icebergCatalogType = ICEBERG_GLUE; GlueCatalog glueCatalog = new GlueCatalog(); - glueCatalog.setConf(getConfiguration()); + Configuration conf = getConfiguration(); + initS3Param(conf); + glueCatalog.setConf(conf); // initialize glue catalog Map<String, String> catalogProperties = catalogProperty.getHadoopProperties(); String warehouse = catalogProperty.getOrDefault(CatalogProperties.WAREHOUSE_LOCATION, CHECKED_WAREHOUSE); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHMSExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHMSExternalCatalog.java index 875633da293..2ccf1e03e28 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHMSExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHMSExternalCatalog.java @@ -60,6 +60,7 @@ public class IcebergHMSExternalCatalog extends IcebergExternalCatalog { HadoopUGI.tryKrbLogin(this.getName(), AuthenticationConfig.getKerberosConfig(hiveConf, AuthenticationConfig.HADOOP_KERBEROS_PRINCIPAL, AuthenticationConfig.HADOOP_KERBEROS_KEYTAB)); + initS3Param(hiveConf); HMSCachedClient cachedClient = HiveMetadataOps.createCachedClient(hiveConf, 1, null); String location = cachedClient.getCatalogLocation("hive"); catalogProperties.put(CatalogProperties.WAREHOUSE_LOCATION, location); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHadoopExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHadoopExternalCatalog.java index 83bc70ce348..c9532f0b154 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHadoopExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergHadoopExternalCatalog.java @@ -56,6 +56,7 @@ public class IcebergHadoopExternalCatalog extends IcebergExternalCatalog { icebergCatalogType = ICEBERG_HADOOP; HadoopCatalog hadoopCatalog = new HadoopCatalog(); Configuration conf = getConfiguration(); + initS3Param(conf); // initialize hive catalog Map<String, String> catalogProperties = new HashMap<>(); String warehouse = catalogProperty.getHadoopProperties().get(CatalogProperties.WAREHOUSE_LOCATION); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergRestExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergRestExternalCatalog.java index e839b9a0017..77a6a7404ef 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergRestExternalCatalog.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergRestExternalCatalog.java @@ -54,8 +54,7 @@ public class IcebergRestExternalCatalog extends IcebergExternalCatalog { private Configuration replaceS3Properties(Configuration conf) { Map<String, String> catalogProperties = catalogProperty.getHadoopProperties(); - String defaultProviderList = String.join(",", S3Properties.AWS_CREDENTIALS_PROVIDERS); - conf.set(Constants.AWS_CREDENTIALS_PROVIDER, defaultProviderList); + initS3Param(conf); String usePahStyle = catalogProperties.getOrDefault(PropertyConverter.USE_PATH_STYLE, "true"); // Set path style conf.set(PropertyConverter.USE_PATH_STYLE, usePahStyle); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/PropertyConverter.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/PropertyConverter.java index 33859dc5f30..24457abc748 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/PropertyConverter.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/PropertyConverter.java @@ -263,9 +263,7 @@ public class PropertyConverter { s3Properties.put(Constants.MAX_ERROR_RETRIES, "2"); s3Properties.put("fs.s3.impl.disable.cache", "true"); s3Properties.putIfAbsent("fs.s3.impl", S3AFileSystem.class.getName()); - String defaultProviderList = String.join(",", S3Properties.AWS_CREDENTIALS_PROVIDERS); - String credentialsProviders = properties - .getOrDefault(S3Properties.CREDENTIALS_PROVIDER, defaultProviderList); + String credentialsProviders = getAWSCredentialsProviders(properties); s3Properties.put(Constants.AWS_CREDENTIALS_PROVIDER, credentialsProviders); if (credential.isWhole()) { s3Properties.put(Constants.ACCESS_KEY, credential.getAccessKey()); @@ -285,6 +283,18 @@ public class PropertyConverter { } } + public static String getAWSCredentialsProviders(Map<String, String> properties) { + String credentialsProviders; + String hadoopCredProviders = properties.get(Constants.AWS_CREDENTIALS_PROVIDER); + if (hadoopCredProviders != null) { + credentialsProviders = hadoopCredProviders; + } else { + String defaultProviderList = String.join(",", S3Properties.AWS_CREDENTIALS_PROVIDERS); + credentialsProviders = properties.getOrDefault(S3Properties.CREDENTIALS_PROVIDER, defaultProviderList); + } + return credentialsProviders; + } + private static Map<String, String> convertToGCSProperties(Map<String, String> props, CloudCredential credential) { // Now we use s3 client to access return convertToS3Properties(S3Properties.prefixToS3(props), credential); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/constants/S3Properties.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/constants/S3Properties.java index c4d3cce9c2c..3297a4bd550 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/constants/S3Properties.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/constants/S3Properties.java @@ -26,6 +26,10 @@ import org.apache.doris.datasource.property.PropertyConverter; import org.apache.doris.thrift.TS3StorageParam; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; +import com.amazonaws.auth.InstanceProfileCredentialsProvider; +import com.amazonaws.auth.SystemPropertiesCredentialsProvider; +import com.amazonaws.auth.WebIdentityTokenCredentialsProvider; +import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.google.common.base.Strings; import com.google.common.collect.Maps; import org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider; @@ -66,6 +70,10 @@ public class S3Properties extends BaseProperties { TemporaryAWSCredentialsProvider.class.getName(), SimpleAWSCredentialsProvider.class.getName(), EnvironmentVariableCredentialsProvider.class.getName(), + SystemPropertiesCredentialsProvider.class.getName(), + ProfileCredentialsProvider.class.getName(), + InstanceProfileCredentialsProvider.class.getName(), + WebIdentityTokenCredentialsProvider.class.getName(), IAMInstanceCredentialsProvider.class.getName()); public static Map<String, String> credentialToMap(CloudCredentialWithEndpoint credential) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org