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 6fe7c9087e3 branch-2.1: [hotfix](jdbc catalog) Fix jdbcclient repeated 
initialization (#51038)
6fe7c9087e3 is described below

commit 6fe7c9087e38d0891799275ade725fae3e29d71b
Author: zy-kkk <[email protected]>
AuthorDate: Wed May 21 12:05:30 2025 +0800

    branch-2.1: [hotfix](jdbc catalog) Fix jdbcclient repeated initialization 
(#51038)
    
    pick #51036
---
 .../doris/datasource/jdbc/JdbcExternalCatalog.java | 50 +++++++++++++---------
 1 file changed, 29 insertions(+), 21 deletions(-)

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 34afa08ff8d..b562a0329fb 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
@@ -220,6 +220,10 @@ public class JdbcExternalCatalog extends ExternalCatalog {
 
     @Override
     protected void initLocalObjectsImpl() {
+        jdbcClient = createJdbcClient();
+    }
+
+    private JdbcClient createJdbcClient() {
         JdbcClientConfig jdbcClientConfig = new JdbcClientConfig()
                 .setCatalog(this.name)
                 .setUser(getJdbcUser())
@@ -236,7 +240,7 @@ public class JdbcExternalCatalog extends ExternalCatalog {
                 .setConnectionPoolMaxWaitTime(getConnectionPoolMaxWaitTime())
                 .setConnectionPoolKeepAlive(isConnectionPoolKeepAlive());
 
-        jdbcClient = JdbcClient.createJdbcClient(jdbcClientConfig);
+        return JdbcClient.createJdbcClient(jdbcClientConfig);
     }
 
     @Override
@@ -337,9 +341,13 @@ public class JdbcExternalCatalog extends ExternalCatalog {
 
     public void configureJdbcTable(JdbcTable jdbcTable, String tableName) {
         makeSureInitialized();
+        setCommonJdbcTableProperties(jdbcTable, tableName, this.jdbcClient);
+    }
+
+    private void setCommonJdbcTableProperties(JdbcTable jdbcTable, String 
tableName, JdbcClient jdbcClient) {
         jdbcTable.setCatalogId(this.getId());
         jdbcTable.setExternalTableName(tableName);
-        jdbcTable.setJdbcTypeName(this.getDatabaseTypeName());
+        jdbcTable.setJdbcTypeName(jdbcClient.getDbType());
         jdbcTable.setJdbcUrl(this.getJdbcUrl());
         jdbcTable.setJdbcUser(this.getJdbcUser());
         jdbcTable.setJdbcPasswd(this.getJdbcPasswd());
@@ -360,22 +368,23 @@ public class JdbcExternalCatalog extends ExternalCatalog {
             return;
         }
         if (isTestConnection()) {
+            JdbcClient testClient = null;
             try {
-                initLocalObjectsImpl();
-                testFeToJdbcConnection();
-                testBeToJdbcConnection();
+                testClient = createJdbcClient();
+                testFeToJdbcConnection(testClient);
+                testBeToJdbcConnection(testClient);
             } finally {
-                if (jdbcClient != null) {
-                    jdbcClient.closeClient();
-                    jdbcClient = null;
+                if (testClient != null) {
+                    testClient.closeClient();
+                    testClient = null;
                 }
             }
         }
     }
 
-    private void testFeToJdbcConnection() throws DdlException {
+    private void testFeToJdbcConnection(JdbcClient testClient) throws 
DdlException {
         try {
-            jdbcClient.testConnection();
+            testClient.testConnection();
         } catch (JdbcClientException e) {
             String errorMessage = "Test FE Connection to JDBC Failed: " + 
e.getMessage();
             LOG.warn(errorMessage, e);
@@ -383,7 +392,7 @@ public class JdbcExternalCatalog extends ExternalCatalog {
         }
     }
 
-    private void testBeToJdbcConnection() throws DdlException {
+    private void testBeToJdbcConnection(JdbcClient testClient) throws 
DdlException {
         Backend aliveBe = null;
         for (Backend be : 
Env.getCurrentSystemInfo().getIdToBackend().values()) {
             if (be.isAlive()) {
@@ -395,11 +404,11 @@ public class JdbcExternalCatalog extends ExternalCatalog {
         }
         TNetworkAddress address = new TNetworkAddress(aliveBe.getHost(), 
aliveBe.getBrpcPort());
         try {
-            JdbcTable jdbcTable = getTestConnectionJdbcTable();
+            JdbcTable testTable = getTestConnectionJdbcTable(testClient);
             PJdbcTestConnectionRequest request = 
InternalService.PJdbcTestConnectionRequest.newBuilder()
-                    .setJdbcTable(ByteString.copyFrom(new 
TSerializer().serialize(jdbcTable.toThrift())))
-                    .setJdbcTableType(jdbcTable.getJdbcTableType().getValue())
-                    .setQueryStr(jdbcClient.getTestQuery()).build();
+                    .setJdbcTable(ByteString.copyFrom(new 
TSerializer().serialize(testTable.toThrift())))
+                    .setJdbcTableType(testTable.getJdbcTableType().getValue())
+                    .setQueryStr(testClient.getTestQuery()).build();
             InternalService.PJdbcTestConnectionResult result = null;
             Future<PJdbcTestConnectionResult> future = 
BackendServiceProxy.getInstance()
                     .testJdbcConnection(address, request);
@@ -413,14 +422,13 @@ public class JdbcExternalCatalog extends ExternalCatalog {
         }
     }
 
-    private JdbcTable getTestConnectionJdbcTable() throws DdlException {
-        JdbcTable jdbcTable = new JdbcTable(0, "test_jdbc_connection", 
Lists.newArrayList(),
+    private JdbcTable getTestConnectionJdbcTable(JdbcClient testClient) throws 
DdlException {
+        JdbcTable testTable = new JdbcTable(0, "test_jdbc_connection", 
Lists.newArrayList(),
                 TableType.JDBC_EXTERNAL_TABLE);
-        this.configureJdbcTable(jdbcTable, "test_jdbc_connection");
-
+        setCommonJdbcTableProperties(testTable, "test_jdbc_connection", 
testClient);
         // Special checksum computation
-        
jdbcTable.setCheckSum(JdbcResource.computeObjectChecksum(this.getDriverUrl()));
+        
testTable.setCheckSum(JdbcResource.computeObjectChecksum(this.getDriverUrl()));
 
-        return jdbcTable;
+        return testTable;
     }
 }


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

Reply via email to