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

morningman pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new c46f1d38c1b [improvement](jdbc catalog)Optimize JDBC Catalog refresh 
to reduce frequent client creation. (#40261)
c46f1d38c1b is described below

commit c46f1d38c1b4be585546dbc7a5d97339102c4ad9
Author: zy-kkk <[email protected]>
AuthorDate: Mon Sep 2 23:42:16 2024 +0800

    [improvement](jdbc catalog)Optimize JDBC Catalog refresh to reduce frequent 
client creation. (#40261)
    
    In the previous JDBC Catalog refresh behavior, each refresh would close
    and recreate the JdbcClient. During this process, we observed that some
    JDBC drivers create classloader-level shared threads when the JdbcClient
    is repeatedly instantiated. These threads cannot be garbage collected.
    Since we use the JdbcClient as the context class loader for the JDBC
    driver, frequent creation leads to a buildup of non-recyclable shared
    threads in the JVM. This PR changes the refresh behavior to update the
    cache only, rather than recreating the client. Recreating the client is
    unnecessary when the Catalog configuration has not changed.
---
 .../apache/doris/datasource/jdbc/JdbcExternalCatalog.java    | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 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 8f9bca79fcc..aabe9d140ee 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
@@ -101,11 +101,9 @@ public class JdbcExternalCatalog extends ExternalCatalog {
     }
 
     @Override
-    public void onRefresh(boolean invalidCache) {
-        super.onRefresh(invalidCache);
-        if (jdbcClient != null) {
-            jdbcClient.closeClient();
-        }
+    public void notifyPropertiesUpdated(Map<String, String> updatedProps) {
+        super.notifyPropertiesUpdated(updatedProps);
+        this.onClose();
     }
 
     @Override
@@ -113,6 +111,7 @@ public class JdbcExternalCatalog extends ExternalCatalog {
         super.onClose();
         if (jdbcClient != null) {
             jdbcClient.closeClient();
+            jdbcClient = null;
         }
     }
 
@@ -205,6 +204,9 @@ public class JdbcExternalCatalog extends ExternalCatalog {
 
     @Override
     protected void initLocalObjectsImpl() {
+        if (jdbcClient != null) {
+            return;
+        }
         JdbcClientConfig jdbcClientConfig = new JdbcClientConfig()
                 .setCatalog(this.name)
                 .setUser(getJdbcUser())


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

Reply via email to