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


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new a32a2d8bb40 [bugfix](iceberg)Restrictions on creating a database 
(#39641) (#40051)
a32a2d8bb40 is described below

commit a32a2d8bb4030b620ddc0af87a906e39e627aea7
Author: Mingyu Chen <[email protected]>
AuthorDate: Wed Aug 28 21:45:03 2024 +0800

    [bugfix](iceberg)Restrictions on creating a database (#39641) (#40051)
    
    bp #39641
    
    Co-authored-by: wuwenchi <[email protected]>
---
 .../iceberg/IcebergGlueExternalCatalog.java        |  2 +-
 .../iceberg/IcebergHMSExternalCatalog.java         |  2 +-
 .../iceberg/IcebergHadoopExternalCatalog.java      |  2 +-
 .../datasource/iceberg/IcebergMetadataOps.java     |  5 ++
 .../iceberg/IcebergRestExternalCatalog.java        |  2 +-
 .../iceberg/test_iceberg_show_create.groovy        | 56 ++++++++++++++++------
 6 files changed, 50 insertions(+), 19 deletions(-)

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 9f3e05757c9..ffe48e68a49 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
@@ -58,7 +58,7 @@ public class IcebergGlueExternalCatalog extends 
IcebergExternalCatalog {
                 catalogProperties.get(S3Properties.Env.ENDPOINT));
         catalogProperties.putIfAbsent(S3FileIOProperties.ENDPOINT, endpoint);
 
-        glueCatalog.initialize(icebergCatalogType, catalogProperties);
+        glueCatalog.initialize(getName(), catalogProperties);
         catalog = glueCatalog;
     }
 
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 34e6f0c187e..c1475064934 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
@@ -44,7 +44,7 @@ public class IcebergHMSExternalCatalog extends 
IcebergExternalCatalog {
         Map<String, String> catalogProperties = 
catalogProperty.getProperties();
         String metastoreUris = 
catalogProperty.getOrDefault(HMSProperties.HIVE_METASTORE_URIS, "");
         catalogProperties.put(CatalogProperties.URI, metastoreUris);
-        hiveCatalog.initialize(icebergCatalogType, catalogProperties);
+        hiveCatalog.initialize(getName(), catalogProperties);
         catalog = hiveCatalog;
     }
 }
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 dffdc454e18..5053e129ef6 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
@@ -61,7 +61,7 @@ public class IcebergHadoopExternalCatalog extends 
IcebergExternalCatalog {
         String warehouse = 
catalogProperty.getHadoopProperties().get(CatalogProperties.WAREHOUSE_LOCATION);
         hadoopCatalog.setConf(conf);
         catalogProperties.put(CatalogProperties.WAREHOUSE_LOCATION, warehouse);
-        hadoopCatalog.initialize(icebergCatalogType, catalogProperties);
+        hadoopCatalog.initialize(getName(), catalogProperties);
         catalog = hadoopCatalog;
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
index dd4792715e8..36654a8e673 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
@@ -106,6 +106,11 @@ public class IcebergMetadataOps implements 
ExternalMetadataOps {
                 ErrorReport.reportDdlException(ErrorCode.ERR_DB_CREATE_EXISTS, 
dbName);
             }
         }
+        String icebergCatalogType = dorisCatalog.getIcebergCatalogType();
+        if (!properties.isEmpty() && 
!IcebergExternalCatalog.ICEBERG_HMS.equals(icebergCatalogType)) {
+            throw new DdlException(
+                "Not supported: create database with properties for iceberg 
catalog type: " + icebergCatalogType);
+        }
         nsCatalog.createNamespace(Namespace.of(dbName), properties);
         dorisCatalog.onRefreshCache(true);
     }
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 77a6a7404ef..908a4fa9e3f 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
@@ -47,7 +47,7 @@ public class IcebergRestExternalCatalog extends 
IcebergExternalCatalog {
 
         Configuration conf = replaceS3Properties(getConfiguration());
 
-        catalog = CatalogUtil.buildIcebergCatalog(icebergCatalogType,
+        catalog = CatalogUtil.buildIcebergCatalog(getName(),
                 convertToRestCatalogProperties(),
                 conf);
     }
diff --git 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_show_create.groovy
 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_show_create.groovy
index 8065998fa71..23705c5494d 100644
--- 
a/regression-test/suites/external_table_p0/iceberg/test_iceberg_show_create.groovy
+++ 
b/regression-test/suites/external_table_p0/iceberg/test_iceberg_show_create.groovy
@@ -22,21 +22,23 @@ suite("test_iceberg_show_create", 
"p0,external,doris,external_docker,external_do
         return
     }
 
-    String rest_port = context.config.otherConfigs.get("iceberg_rest_uri_port")
-    String minio_port = context.config.otherConfigs.get("iceberg_minio_port")
-    String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
     String catalog_name = "test_iceberg_show_create"
+    String hivePrefix = "hive2";
+    String hms_port = context.config.otherConfigs.get(hivePrefix + "HmsPort")
+    String hdfs_port = context.config.otherConfigs.get(hivePrefix + "HdfsPort")
+    String iceberg_catalog_name = 
"test_iceberg_write_partitions_iceberg_${hivePrefix}"
+    String externalEnvIp = context.config.otherConfigs.get("externalEnvIp")
+    String default_fs = "hdfs://${externalEnvIp}:${hdfs_port}"
+    String warehouse = "${default_fs}/warehouse"
 
     sql """drop catalog if exists ${catalog_name}"""
-    sql """
-    CREATE CATALOG ${catalog_name} PROPERTIES (
+    sql """create catalog if not exists ${catalog_name} properties (
         'type'='iceberg',
-        'iceberg.catalog.type'='rest',
-        'uri' = 'http://${externalEnvIp}:${rest_port}',
-        "s3.access_key" = "admin",
-        "s3.secret_key" = "password",
-        "s3.endpoint" = "http://${externalEnvIp}:${minio_port}";,
-        "s3.region" = "us-east-1"
+        'iceberg.catalog.type'='hms',
+        'hive.metastore.uris' = 'thrift://${externalEnvIp}:${hms_port}',
+        'fs.defaultFS' = '${default_fs}',
+        'warehouse' = '${warehouse}',
+        'use_meta_cache' = 'true'
     );"""
 
     sql """ switch ${catalog_name} """
@@ -49,25 +51,49 @@ suite("test_iceberg_show_create", 
"p0,external,doris,external_docker,external_do
     sql """ drop database if exists ${db1} """
     sql """ drop database if exists ${db2} """
 
-    sql """ create database ${db1} properties 
('location'='s3a://warehouse/wh/${db1}') """
+    sql """ create database ${db1} properties 
('location'='${warehouse}/other_location') """
     sql """ create database ${db2} """
 
     String result = ""
     result = sql "show create database ${db1}"
     logger.info("${result}")
-    
assertTrue(result.toString().containsIgnoreCase("s3a://warehouse/wh/${db1}"))
+    
assertTrue(result.toString().containsIgnoreCase("${warehouse}/other_location"))
 
     result = sql "show create database ${db2}"
     logger.info("${result}")
-    
assertTrue(result.toString().containsIgnoreCase("s3a://warehouse/wh/${db2}"))
+    assertTrue(result.toString().containsIgnoreCase("${warehouse}/${db2}"))
 
     sql """ create table ${db1}.${tb1} (id int) """
     result = sql "show create table ${db1}.${tb1}"
     logger.info("${result}")
-    
assertTrue(result.toString().containsIgnoreCase("s3a://warehouse/wh/${db1}/${tb1}"))
+    
assertTrue(result.toString().containsIgnoreCase("${warehouse}/other_location/${tb1}"))
 
     sql """ drop table ${db1}.${tb1} """
     sql """ drop database ${db1} """
     sql """ drop database ${db2} """
 
+    String rest_port = context.config.otherConfigs.get("iceberg_rest_uri_port")
+    String minio_port = context.config.otherConfigs.get("iceberg_minio_port")
+    sql """drop catalog if exists ${catalog_name}"""
+    sql """
+    CREATE CATALOG ${catalog_name} PROPERTIES (
+        'type'='iceberg',
+        'iceberg.catalog.type'='rest',
+        'uri' = 'http://${externalEnvIp}:${rest_port}',
+        "s3.access_key" = "admin",
+        "s3.secret_key" = "password",
+        "s3.endpoint" = "http://${externalEnvIp}:${minio_port}";,
+        "s3.region" = "us-east-1"
+    );"""
+
+    sql """ switch ${catalog_name} """
+    sql """ drop database if exists ${db1} """
+
+    test {
+        sql """ create database ${db1} properties 
('location'='${warehouse}/other_location') """
+        exception "Not supported: create database with properties for iceberg 
catalog type"
+    }
+
+    sql """ drop database if exists ${db1} """
+    sql """drop catalog if exists ${catalog_name}"""
 }


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

Reply via email to