This is an automated email from the ASF dual-hosted git repository.

kirs pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new df3b1f26fcc [Fix](refactor-params)Fix DLF Access (#53210)
df3b1f26fcc is described below

commit df3b1f26fcc26246d6a46ae4d103827d23ca1f2d
Author: Calvin Kirs <[email protected]>
AuthorDate: Tue Jul 15 09:41:07 2025 +0800

    [Fix](refactor-params)Fix DLF Access (#53210)
    
    ### What problem does this PR solve?
    
    #50238
    
    
[](https://github.com/apache/doris/commit/97402e3956949b00073527254a0640c337be0625)
    
    ####
    When integrating Alibaba Cloud DLF (Data Lake Formation) as a metadata
    source, we encountered the following issues:
    
    catalogId was not explicitly specified, which caused DLF to return only
    a partial list of databases or tables.
    
    When using a DLF-provided endpoint, it must be converted to an
    OSSHDFS-compatible endpoint (e.g., oss:// or oss+hdfs://) in order to
    support subsequent data access or file operations.
---
 .../property/metastore/AliyunDLFBaseProperties.java     | 11 +++++++++++
 .../metastore/HMSAliyunDLFMetaStoreProperties.java      | 17 +++++++++++------
 .../datasource/property/storage/OSSHdfsProperties.java  | 11 ++++++++++-
 .../doris/datasource/property/storage/S3Properties.java |  7 +++++++
 4 files changed, 39 insertions(+), 7 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AliyunDLFBaseProperties.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AliyunDLFBaseProperties.java
index 8ab305aa861..0744a716b18 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AliyunDLFBaseProperties.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/AliyunDLFBaseProperties.java
@@ -20,6 +20,8 @@ package org.apache.doris.datasource.property.metastore;
 import org.apache.doris.datasource.property.ConnectorPropertiesUtils;
 import org.apache.doris.datasource.property.ConnectorProperty;
 
+import com.aliyun.datalake.metastore.common.DataLakeConfig;
+
 import java.util.Map;
 
 public class AliyunDLFBaseProperties {
@@ -49,11 +51,20 @@ public class AliyunDLFBaseProperties {
             description = "The uid of the Aliyun DLF.")
     protected String dlfUid = "";
 
+    @ConnectorProperty(names = {"dlf.catalog.id"},
+            description = "The catalog id of the Aliyun DLF. If not set, it 
will be the same as dlf.uid.")
+    protected String dlfCatalogId = "";
+
     @ConnectorProperty(names = {"dlf.access.public", 
"dlf.catalog.accessPublic"},
             required = false,
             description = "Enable public access to Aliyun DLF.")
     protected String dlfAccessPublic = "false";
 
+    @ConnectorProperty(names = {DataLakeConfig.CATALOG_PROXY_MODE},
+            required = false,
+            description = "The proxy mode of the Aliyun DLF. Default is 
DLF_ONLY.")
+    protected String dlfProxyMode = "DLF_ONLY";
+
     public static AliyunDLFBaseProperties of(Map<String, String> properties) {
         AliyunDLFBaseProperties propertiesObj = new AliyunDLFBaseProperties();
         ConnectorPropertiesUtils.bindConnectorProperties(propertiesObj, 
properties);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HMSAliyunDLFMetaStoreProperties.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HMSAliyunDLFMetaStoreProperties.java
index e971f0fe58b..2a7dc6a12d2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HMSAliyunDLFMetaStoreProperties.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/metastore/HMSAliyunDLFMetaStoreProperties.java
@@ -17,6 +17,7 @@
 
 package org.apache.doris.datasource.property.metastore;
 
+import com.aliyun.datalake.metastore.common.DataLakeConfig;
 import org.apache.hadoop.hive.conf.HiveConf;
 
 import java.util.Map;
@@ -40,12 +41,16 @@ public class HMSAliyunDLFMetaStoreProperties extends 
AbstractHMSProperties {
         // @see com.aliyun.datalake.metastore.hive.common.utils.ConfigUtils
         // todo support other parameters
         hiveConf = new HiveConf();
-        hiveConf.set("dlf.catalog.accessKeyId", baseProperties.dlfAccessKey);
-        hiveConf.set("dlf.catalog.accessKeySecret", 
baseProperties.dlfSecretKey);
-        hiveConf.set("dlf.catalog.endpoint", baseProperties.dlfEndpoint);
-        hiveConf.set("dlf.catalog.region", baseProperties.dlfRegion);
-        hiveConf.set("dlf.catalog.securityToken", 
baseProperties.dlfSessionToken);
-        hiveConf.set("dlf.catalog.id", baseProperties.dlfUid);
+        hiveConf.set(DataLakeConfig.CATALOG_ACCESS_KEY_ID, 
baseProperties.dlfAccessKey);
+        hiveConf.set(DataLakeConfig.CATALOG_ACCESS_KEY_SECRET, 
baseProperties.dlfSecretKey);
+        hiveConf.set(DataLakeConfig.CATALOG_ENDPOINT, 
baseProperties.dlfEndpoint);
+        hiveConf.set(DataLakeConfig.CATALOG_REGION_ID, 
baseProperties.dlfRegion);
+        hiveConf.set(DataLakeConfig.CATALOG_SECURITY_TOKEN, 
baseProperties.dlfSessionToken);
+        hiveConf.set(DataLakeConfig.CATALOG_USER_ID, baseProperties.dlfUid);
+        hiveConf.set(DataLakeConfig.CATALOG_ID, baseProperties.dlfCatalogId);
+        hiveConf.set(DataLakeConfig.CATALOG_PROXY_MODE, 
baseProperties.dlfProxyMode);
+        hiveConf.set("hive.metastore.type", "dlf");
+        hiveConf.set("type", "hms");
     }
 
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSHdfsProperties.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSHdfsProperties.java
index 8aeb6c307e6..8c29addaf57 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSHdfsProperties.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/OSSHdfsProperties.java
@@ -58,7 +58,8 @@ public class OSSHdfsProperties extends 
HdfsCompatibleProperties {
             description = "The access key of OSS.")
     protected String accessKey = "";
 
-    @ConnectorProperty(names = {"oss.hdfs.secret_key", "oss.secret_key"}, 
description = "The secret key of OSS.")
+    @ConnectorProperty(names = {"oss.hdfs.secret_key", "oss.secret_key", 
"dlf.secret_key", "dlf.catalog.secret_key"},
+            description = "The secret key of OSS.")
     protected String secretKey = "";
 
     @ConnectorProperty(names = {"oss.hdfs.region", "oss.region", "dlf.region"},
@@ -125,6 +126,13 @@ public class OSSHdfsProperties extends 
HdfsCompatibleProperties {
         }
     }
 
+    private void convertDlfToOssEndpointIfNeeded() {
+        if (this.endpoint.contains("dlf")) {
+            // If the endpoint already contains "oss-dls.aliyuncs.com", return 
it as is.
+            this.endpoint = this.region + ".oss-dls.aliyuncs.com";
+        }
+    }
+
     public static Optional<String> extractRegion(String endpoint) {
         for (Pattern pattern : ENDPOINT_PATTERN) {
             Matcher matcher = pattern.matcher(endpoint.toLowerCase());
@@ -160,6 +168,7 @@ public class OSSHdfsProperties extends 
HdfsCompatibleProperties {
             }
             this.region = regionOptional.get();
         }
+        convertDlfToOssEndpointIfNeeded();
         if (StringUtils.isBlank(fsDefaultFS)) {
             this.fsDefaultFS = 
HdfsPropertiesUtils.extractDefaultFsFromUri(origProps, supportSchema);
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
index 5953ffef8b8..f036494875e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/property/storage/S3Properties.java
@@ -157,6 +157,7 @@ public class S3Properties extends 
AbstractS3CompatibleProperties {
     @Override
     public void initNormalizeAndCheckProps() {
         super.initNormalizeAndCheckProps();
+        convertGlueToS3EndpointIfNeeded();
         if (StringUtils.isNotBlank(accessKey) && 
StringUtils.isNotBlank(secretKey)) {
             return;
         }
@@ -250,6 +251,12 @@ public class S3Properties extends 
AbstractS3CompatibleProperties {
         return backendProperties;
     }
 
+    private void convertGlueToS3EndpointIfNeeded() {
+        if (this.endpoint.contains("glue")) {
+            this.endpoint = "s3." + this.region + ".amazonaws.com";
+        }
+    }
+
     @Override
     public AwsCredentialsProvider getAwsCredentialsProvider() {
         AwsCredentialsProvider credentialsProvider = 
super.getAwsCredentialsProvider();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to