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

zykkk 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 a7d31f0c32d [improvement](jdbc catalog) Change the connection pool 
parameters of Jdbc Catalog to be configurable (#28779)
a7d31f0c32d is described below

commit a7d31f0c32d78d7f98988aa9f55603d9fc7cb3bd
Author: zy-kkk <zhongy...@gmail.com>
AuthorDate: Wed Dec 27 17:05:14 2023 +0800

    [improvement](jdbc catalog) Change the connection pool parameters of Jdbc 
Catalog to be configurable (#28779)
---
 bin/start_be.sh                                      |  2 +-
 conf/be.conf                                         |  4 ++--
 .../java/org/apache/doris/jdbc/JdbcExecutor.java     |  6 +++++-
 .../main/java/org/apache/doris/common/Config.java    | 20 ++++++++++++++++++++
 .../doris/datasource/jdbc/client/JdbcClient.java     | 14 ++++++++------
 5 files changed, 36 insertions(+), 10 deletions(-)

diff --git a/bin/start_be.sh b/bin/start_be.sh
index 48ae202d9fa..67a2e7d2201 100755
--- a/bin/start_be.sh
+++ b/bin/start_be.sh
@@ -303,7 +303,7 @@ java_version="$(
 CUR_DATE=$(date +%Y%m%d-%H%M%S)
 LOG_PATH="-DlogPath=${DORIS_HOME}/log/jni.log"
 COMMON_OPTS="-Dsun.java.command=DorisBE -XX:-CriticalJNINatives"
-JDBC_OPTS="-DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 -DJDBC_MAX_IDLE_TIME=300000 
-DJDBC_MAX_WAIT_TIME=5000"
+JDBC_OPTS="-DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 -DJDBC_MAX_IDLE_TIME=300000 
-DJDBC_MAX_WAIT_TIME=5000 -DJDBC_KEEP_ALIVE=FALSE"
 
 if [[ "${java_version}" -gt 8 ]]; then
     if [[ -z ${JAVA_OPTS_FOR_JDK_9} ]]; then
diff --git a/conf/be.conf b/conf/be.conf
index 98371325914..9c877901d59 100644
--- a/conf/be.conf
+++ b/conf/be.conf
@@ -19,10 +19,10 @@ CUR_DATE=`date +%Y%m%d-%H%M%S`
 
 PPROF_TMPDIR="$DORIS_HOME/log/"
 
-JAVA_OPTS="-Xmx1024m -DlogPath=$DORIS_HOME/log/jni.log 
-Xloggc:$DORIS_HOME/log/be.gc.log.$CUR_DATE 
-Djavax.security.auth.useSubjectCredsOnly=false -Dsun.java.command=DorisBE 
-XX:-CriticalJNINatives -DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 
-DJDBC_MAX_IDLE_TIME=300000 -DJDBC_MAX_WAIT_TIME=5000"
+JAVA_OPTS="-Xmx1024m -DlogPath=$DORIS_HOME/log/jni.log 
-Xloggc:$DORIS_HOME/log/be.gc.log.$CUR_DATE 
-Djavax.security.auth.useSubjectCredsOnly=false -Dsun.java.command=DorisBE 
-XX:-CriticalJNINatives -DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 
-DJDBC_MAX_IDLE_TIME=300000 -DJDBC_MAX_WAIT_TIME=5000 -DJDBC_KEEP_ALIVE=FALSE"
 
 # For jdk 9+, this JAVA_OPTS will be used as default JVM options
-JAVA_OPTS_FOR_JDK_9="-Xmx1024m -DlogPath=$DORIS_HOME/log/jni.log 
-Xlog:gc:$DORIS_HOME/log/be.gc.log.$CUR_DATE 
-Djavax.security.auth.useSubjectCredsOnly=false -Dsun.java.command=DorisBE 
-XX:-CriticalJNINatives -DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 
-DJDBC_MAX_IDLE_TIME=300000 -DJDBC_MAX_WAIT_TIME=5000"
+JAVA_OPTS_FOR_JDK_9="-Xmx1024m -DlogPath=$DORIS_HOME/log/jni.log 
-Xlog:gc:$DORIS_HOME/log/be.gc.log.$CUR_DATE 
-Djavax.security.auth.useSubjectCredsOnly=false -Dsun.java.command=DorisBE 
-XX:-CriticalJNINatives -DJDBC_MIN_POOL=1 -DJDBC_MAX_POOL=100 
-DJDBC_MAX_IDLE_TIME=300000 -DJDBC_MAX_WAIT_TIME=5000 -DJDBC_KEEP_ALIVE=FALSE"
 
 # since 1.2, the JAVA_HOME need to be set to run BE process.
 # JAVA_HOME=/path/to/jdk/
diff --git 
a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutor.java
 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutor.java
index c5625717c0e..d3f4006723d 100644
--- 
a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutor.java
+++ 
b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/JdbcExecutor.java
@@ -90,6 +90,7 @@ public class JdbcExecutor {
     private int minIdleSize;
     private int maxIdleTime;
     private int maxWaitTime;
+    private boolean isKeepAlive;
     private TOdbcTableType tableType;
 
     public JdbcExecutor(byte[] thriftParams) throws Exception {
@@ -105,12 +106,14 @@ public class JdbcExecutor {
         maxPoolSize = Integer.valueOf(System.getProperty("JDBC_MAX_POOL", 
"100"));
         maxIdleTime = Integer.valueOf(System.getProperty("JDBC_MAX_IDLE_TIME", 
"300000"));
         maxWaitTime = Integer.valueOf(System.getProperty("JDBC_MAX_WAIT_TIME", 
"5000"));
+        isKeepAlive = Boolean.valueOf(System.getProperty("JDBC_KEEP_ALIVE", 
"false"));
         minIdleSize = minPoolSize > 0 ? 1 : 0;
         LOG.info("JdbcExecutor set minPoolSize = " + minPoolSize
                 + ", maxPoolSize = " + maxPoolSize
                 + ", maxIdleTime = " + maxIdleTime
                 + ", maxWaitTime = " + maxWaitTime
-                + ", minIdleSize = " + minIdleSize);
+                + ", minIdleSize = " + minIdleSize
+                + ", isKeepAlive = " + isKeepAlive);
         init(request.driver_path, request.statement, request.batch_size, 
request.jdbc_driver_class,
                 request.jdbc_url, request.jdbc_user, request.jdbc_password, 
request.op, request.table_type);
     }
@@ -441,6 +444,7 @@ public class JdbcExecutor {
                             setValidationQuery(ds, tableType);
                             ds.setTimeBetweenEvictionRunsMillis(maxIdleTime / 
5);
                             ds.setMinEvictableIdleTimeMillis(maxIdleTime);
+                            ds.setKeepAlive(isKeepAlive);
                             druidDataSource = ds;
                             // here is a cache of datasource, which using the 
string(jdbcUrl + jdbcUser +
                             // jdbcPassword) as key.
diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java 
b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index 907d02ffc26..979f49e1fa5 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -140,6 +140,26 @@ public class Config extends ConfigBase {
                     + "if the specified driver file path is not an absolute 
path, Doris will find jars from this path"})
     public static String jdbc_drivers_dir = System.getenv("DORIS_HOME") + 
"/jdbc_drivers";
 
+    @ConfField(description = {"JDBC Catalog FE 连接池的最小连接数",
+            "The minimum number of JDBC Catalog FE connection pool"})
+    public static int jdbc_min_pool_size = 1;
+
+    @ConfField(description = {"JDBC Catalog FE 连接池的最大连接数",
+            "The maximum number of JDBC Catalog FE connection pool"})
+    public static int jdbc_max_pool_size = 100;
+
+    @ConfField(description = {"JDBC Catalog FE 连接池的最大空闲连接时间",
+            "The maximum idle time of JDBC Catalog FE connection pool"})
+    public static int jdbc_max_idle_time = 300000;
+
+    @ConfField(description = {"JDBC Catalog FE 连接池的最大等待时间",
+            "The maximum wait time of JDBC Catalog FE connection pool"})
+    public static int jdbc_max_wait_time = 5000;
+
+    @ConfField(description = {"JDBC Catalog FE 连接池的 KeepAlive 策略",
+            "The keep alive strategy of JDBC Catalog FE connection pool"})
+    public static boolean jdbc_keep_alive = false;
+
     @ConfField(mutable = true, masterOnly = true, description = {"broker load 
时,单个节点上 load 执行计划的默认并行度",
             "The default parallelism of the load execution plan on a single 
node when the broker load is submitted"})
     public static int default_load_parallelism = 1;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
index 11969cb8654..bdf5a6eab38 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.JdbcResource;
 import org.apache.doris.catalog.ScalarType;
 import org.apache.doris.catalog.Type;
+import org.apache.doris.common.Config;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.util.Util;
 
@@ -131,17 +132,18 @@ public abstract class JdbcClient {
             dataSource.setUrl(jdbcUrl);
             dataSource.setUsername(jdbcUser);
             dataSource.setPassword(password);
-            dataSource.setMinIdle(1);
-            dataSource.setInitialSize(1);
-            dataSource.setMaxActive(100);
-            dataSource.setTimeBetweenEvictionRunsMillis(600000);
-            dataSource.setMinEvictableIdleTimeMillis(300000);
+            dataSource.setMinIdle(Config.jdbc_min_pool_size > 0 ? 1 : 0);
+            dataSource.setInitialSize(Config.jdbc_min_pool_size);
+            dataSource.setMaxActive(Config.jdbc_max_pool_size);
+            
dataSource.setTimeBetweenEvictionRunsMillis(Config.jdbc_max_idle_time * 2L);
+            
dataSource.setMinEvictableIdleTimeMillis(Config.jdbc_max_idle_time);
             // set connection timeout to 5s.
             // The default is 30s, which is too long.
             // Because when querying information_schema db, BE will call 
thrift rpc(default timeout is 30s)
             // to FE to get schema info, and may create connection here, if we 
set it too long and the url is invalid,
             // it may cause the thrift rpc timeout.
-            dataSource.setMaxWait(5000);
+            dataSource.setMaxWait(Config.jdbc_max_wait_time);
+            dataSource.setKeepAlive(Config.jdbc_keep_alive);
         } catch (MalformedURLException e) {
             throw new JdbcClientException("MalformedURLException to load class 
about " + driverUrl, e);
         } finally {


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

Reply via email to