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 9430b27e682 [branch-2.1][improvement](jdbc catalog) improvement some 
jdbc catalog properties check order  (#38770)
9430b27e682 is described below

commit 9430b27e6825ee8c3829181aa8d994d85fce7545
Author: zy-kkk <zhongy...@gmail.com>
AuthorDate: Mon Aug 5 09:14:04 2024 +0800

    [branch-2.1][improvement](jdbc catalog) improvement some jdbc catalog 
properties check order  (#38770)
    
    pick (#38439)
    
    1. Move the execution of testJdbcConnection() to checkWhenCreating
    instead of the constructor
    2. Move the logic of renaming lower_case_table_names to
    lower_case_meta_names to setDefaultPropsIfMissing
---
 .../apache/doris/datasource/CatalogFactory.java    |  2 +-
 .../apache/doris/datasource/CatalogProperty.java   |  4 ++
 .../doris/datasource/jdbc/JdbcExternalCatalog.java | 57 +++++++++++-----------
 .../datasource/jdbc/JdbcExternalCatalogTest.java   | 26 +++++++---
 4 files changed, 52 insertions(+), 37 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogFactory.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogFactory.java
index fdd3b8fbe02..44e0470b069 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogFactory.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogFactory.java
@@ -122,7 +122,7 @@ public class CatalogFactory {
                 catalog = new EsExternalCatalog(catalogId, name, resource, 
props, comment);
                 break;
             case "jdbc":
-                catalog = new JdbcExternalCatalog(catalogId, name, resource, 
props, comment, isReplay);
+                catalog = new JdbcExternalCatalog(catalogId, name, resource, 
props, comment);
                 break;
             case "iceberg":
                 catalog = 
IcebergExternalCatalogFactory.createCatalog(catalogId, name, resource, props, 
comment);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogProperty.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogProperty.java
index 50aea847e8f..a54a28d59dd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogProperty.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogProperty.java
@@ -115,6 +115,10 @@ public class CatalogProperty implements Writable {
         this.properties.put(key, val);
     }
 
+    public void deleteProperty(String key) {
+        this.properties.remove(key);
+    }
+
     @Override
     public void write(DataOutput out) throws IOException {
         Text.writeString(out, GsonUtils.GSON.toJson(this));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java
index 568c9e8480c..73b6639c7b9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalog.java
@@ -72,11 +72,10 @@ public class JdbcExternalCatalog extends ExternalCatalog {
     private transient JdbcClient jdbcClient;
 
     public JdbcExternalCatalog(long catalogId, String name, String resource, 
Map<String, String> props,
-            String comment, boolean isReplay)
+            String comment)
             throws DdlException {
         super(catalogId, name, InitCatalogLog.Type.JDBC, comment);
-        this.catalogProperty = new CatalogProperty(resource, 
processCompatibleProperties(props, isReplay));
-        testJdbcConnection(isReplay);
+        this.catalogProperty = new CatalogProperty(resource, 
processCompatibleProperties(props));
     }
 
     @Override
@@ -99,6 +98,21 @@ public class JdbcExternalCatalog extends ExternalCatalog {
                 getConnectionPoolMaxWaitTime(), 
getConnectionPoolMaxLifeTime());
     }
 
+    @Override
+    public void setDefaultPropsIfMissing(boolean isReplay) {
+        super.setDefaultPropsIfMissing(isReplay);
+        // Modify lower_case_table_names to lower_case_meta_names if it exists
+        if 
(catalogProperty.getProperties().containsKey("lower_case_table_names") && 
isReplay) {
+            String lowerCaseTableNamesValue = 
catalogProperty.getProperties().get("lower_case_table_names");
+            catalogProperty.addProperty("lower_case_meta_names", 
lowerCaseTableNamesValue);
+            catalogProperty.deleteProperty("lower_case_table_names");
+            LOG.info("Modify lower_case_table_names to lower_case_meta_names, 
value: {}", lowerCaseTableNamesValue);
+        } else if 
(catalogProperty.getProperties().containsKey("lower_case_table_names") && 
!isReplay) {
+            throw new IllegalArgumentException("Jdbc catalog property 
lower_case_table_names is not supported,"
+                    + " please use lower_case_meta_names instead.");
+        }
+    }
+
     @Override
     public void onRefresh(boolean invalidCache) {
         super.onRefresh(invalidCache);
@@ -115,24 +129,12 @@ public class JdbcExternalCatalog extends ExternalCatalog {
         }
     }
 
-    protected Map<String, String> processCompatibleProperties(Map<String, 
String> props, boolean isReplay)
+    protected Map<String, String> processCompatibleProperties(Map<String, 
String> props)
             throws DdlException {
         Map<String, String> properties = Maps.newHashMap();
         for (Map.Entry<String, String> kv : props.entrySet()) {
             properties.put(StringUtils.removeStart(kv.getKey(), 
JdbcResource.JDBC_PROPERTIES_PREFIX), kv.getValue());
         }
-
-        // Modify lower_case_table_names to lower_case_meta_names if it exists
-        if (properties.containsKey("lower_case_table_names") && isReplay) {
-            String lowerCaseTableNamesValue = 
properties.get("lower_case_table_names");
-            properties.put("lower_case_meta_names", lowerCaseTableNamesValue);
-            properties.remove("lower_case_table_names");
-            LOG.info("Modify lower_case_table_names to lower_case_meta_names, 
value: {}", lowerCaseTableNamesValue);
-        } else if (properties.containsKey("lower_case_table_names") && 
!isReplay) {
-            throw new DdlException("Jdbc catalog property 
lower_case_table_names is not supported,"
-                    + " please use lower_case_meta_names instead");
-        }
-
         String jdbcUrl = properties.getOrDefault(JdbcResource.JDBC_URL, "");
         if (!Strings.isNullOrEmpty(jdbcUrl)) {
             jdbcUrl = JdbcResource.handleJdbcUrl(jdbcUrl);
@@ -272,6 +274,7 @@ public class JdbcExternalCatalog extends ExternalCatalog {
                 catalogProperty.addProperty(JdbcResource.CHECK_SUM, 
computedChecksum);
             }
         }
+        testJdbcConnection();
     }
 
     /**
@@ -313,22 +316,20 @@ public class JdbcExternalCatalog extends ExternalCatalog {
         jdbcTable.setConnectionPoolKeepAlive(this.isConnectionPoolKeepAlive());
     }
 
-    private void testJdbcConnection(boolean isReplay) throws DdlException {
+    private void testJdbcConnection() throws DdlException {
         if (FeConstants.runningUnitTest) {
             // skip test connection in unit test
             return;
         }
-        if (!isReplay) {
-            if (isTestConnection()) {
-                try {
-                    initLocalObjectsImpl();
-                    testFeToJdbcConnection();
-                    testBeToJdbcConnection();
-                } finally {
-                    if (jdbcClient != null) {
-                        jdbcClient.closeClient();
-                        jdbcClient = null;
-                    }
+        if (isTestConnection()) {
+            try {
+                initLocalObjectsImpl();
+                testFeToJdbcConnection();
+                testBeToJdbcConnection();
+            } finally {
+                if (jdbcClient != null) {
+                    jdbcClient.closeClient();
+                    jdbcClient = null;
                 }
             }
         }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalogTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalogTest.java
index 35ef5fd56f2..5a7379b2e84 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalogTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/datasource/jdbc/JdbcExternalCatalogTest.java
@@ -41,24 +41,34 @@ public class JdbcExternalCatalogTest {
         properties.put(JdbcResource.DRIVER_URL, "ojdbc8.jar");
         properties.put(JdbcResource.JDBC_URL, 
"jdbc:oracle:thin:@127.0.0.1:1521:XE");
         properties.put(JdbcResource.DRIVER_CLASS, 
"oracle.jdbc.driver.OracleDriver");
-        jdbcExternalCatalog = new JdbcExternalCatalog(1L, "testCatalog", null, 
properties, "testComment", false);
+        jdbcExternalCatalog = new JdbcExternalCatalog(1L, "testCatalog", null, 
properties, "testComment");
     }
 
     @Test
-    public void testProcessCompatibleProperties() throws DdlException {
+    public void testProcessCompatibleProperties() {
         // Create a properties map with lower_case_table_names
-        Map<String, String> inputProps = new HashMap<>();
-        inputProps.put("lower_case_table_names", "true");
+        
jdbcExternalCatalog.getCatalogProperty().addProperty("lower_case_table_names", 
"true");
 
         // Call processCompatibleProperties
-        Map<String, String> resultProps = 
jdbcExternalCatalog.processCompatibleProperties(inputProps, true);
+        jdbcExternalCatalog.setDefaultPropsIfMissing(true);
 
         // Assert that lower_case_meta_names is present and has the correct 
value
-        Assert.assertTrue(resultProps.containsKey("lower_case_meta_names"));
-        Assert.assertEquals("true", resultProps.get("lower_case_meta_names"));
+        Assert.assertTrue(
+                
jdbcExternalCatalog.getCatalogProperty().getProperties().containsKey("lower_case_meta_names"));
+        Assert.assertEquals("true",
+                
jdbcExternalCatalog.getCatalogProperty().getProperties().get("lower_case_meta_names"));
 
         // Assert that lower_case_table_names is not present
-        Assert.assertFalse(resultProps.containsKey("lower_case_table_names"));
+        Assert.assertFalse(
+                
jdbcExternalCatalog.getCatalogProperty().getProperties().containsKey("lower_case_table_names"));
+
+        
jdbcExternalCatalog.getCatalogProperty().addProperty("lower_case_table_names", 
"true");
+        IllegalArgumentException exceptione = 
Assert.assertThrows(IllegalArgumentException.class,
+                () -> jdbcExternalCatalog.setDefaultPropsIfMissing(false));
+        Assert.assertEquals(
+                "Jdbc catalog property lower_case_table_names is not 
supported, please use lower_case_meta_names instead.",
+                exceptione.getMessage());
+        
jdbcExternalCatalog.getCatalogProperty().deleteProperty("lower_case_table_names");
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to