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

xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 3c84cd06ba6f43b9b2af1f07514bf1ae9a854f9f
Author: Pengfei Zhan <dethr...@gmail.com>
AuthorDate: Sat Jan 14 14:42:16 2023 +0800

    support clikchouse jdbc url ext config
    
    Co-authored-by: chenzhx <c...@apache.io>
---
 .../org/apache/kylin/common/KylinConfigBase.java   | 12 +++++++++
 .../kyligence/kap/clickhouse/job/ClickHouse.java   | 31 ++++++++++++++--------
 .../kap/clickhouse/job/ClickHouseTest.java         | 10 +++++--
 3 files changed, 40 insertions(+), 13 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index bebd3f403f..95fa963d5e 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -3621,6 +3621,18 @@ public abstract class KylinConfigBase implements 
Serializable {
         return 
Long.parseLong(getOptional("kylin.second-storage.wait-index-build-second", 
"10"));
     }
 
+    public String getSecondStorageJDBCKeepAliveTimeout() {
+        return getOptional("kylin.second-storage.jdbc-keep-alive-timeout", 
"600000");
+    }
+
+    public String getSecondStorageJDBCSocketTimeout() {
+        return getOptional("kylin.second-storage.jdbc-socket-timeout", 
"600000");
+    }
+
+    public String getSecondStorageJDBCExtConfig() {
+        return getOptional("kylin.second-storage.jdbc-ext-config", 
"connect_timeout=3");
+    }
+
     public long getRoutineOpsTaskTimeOut() {
         return 
TimeUtil.timeStringAs(getOptional("kylin.metadata.ops-cron-timeout", "4h"), 
TimeUnit.MILLISECONDS);
     }
diff --git 
a/src/second-storage/clickhouse/src/main/java/io/kyligence/kap/clickhouse/job/ClickHouse.java
 
b/src/second-storage/clickhouse/src/main/java/io/kyligence/kap/clickhouse/job/ClickHouse.java
index 9664bde2e7..9822425ff8 100644
--- 
a/src/second-storage/clickhouse/src/main/java/io/kyligence/kap/clickhouse/job/ClickHouse.java
+++ 
b/src/second-storage/clickhouse/src/main/java/io/kyligence/kap/clickhouse/job/ClickHouse.java
@@ -18,12 +18,6 @@
 
 package io.kyligence.kap.clickhouse.job;
 
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-
 import java.io.Closeable;
 import java.sql.Connection;
 import java.sql.Date;
@@ -44,6 +38,14 @@ import java.util.Objects;
 import java.util.Properties;
 import java.util.function.Function;
 
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.apache.kylin.common.KylinConfig;
+
+import lombok.Getter;
+import lombok.val;
+import lombok.extern.slf4j.Slf4j;
+
 @Slf4j
 @Getter
 public class ClickHouse implements Closeable {
@@ -113,18 +115,25 @@ public class ClickHouse implements Closeable {
             base.append('?');
             List<String> paramList = new ArrayList<>();
             param.forEach((name, value) -> {
-              if (!ClickHouse.EXT_CONFIG.equals(name)){
+                if (ClickHouse.SOCKET_TIMEOUT.equals(name)) {
+                    value = 
getNoEmptyValue(KylinConfig.getInstanceFromEnv().getSecondStorageJDBCSocketTimeout(),
 value);
+                }
+                if (ClickHouse.KEEP_ALIVE_TIMEOUT.equals(name)) {
+                    value = 
getNoEmptyValue(KylinConfig.getInstanceFromEnv().getSecondStorageJDBCKeepAliveTimeout(),
 value);
+                }
                 paramList.add(name + "=" + value);
-              }
             });
             base.append(String.join("&", paramList));
-            if(param.get(ClickHouse.EXT_CONFIG) != null) {
-                base.append("&").append(param.get(ClickHouse.EXT_CONFIG));
-            }
+            String extConfig = 
KylinConfig.getInstanceFromEnv().getSecondStorageJDBCExtConfig();
+            base.append("&").append(extConfig);
         }
         return base.toString();
     }
 
+    private static String getNoEmptyValue(String value1, String value2) {
+        return StringUtils.isEmpty(value1) ? value2 : value1;
+    }
+
     private void logSql(String sql) {
         log.info("Execute SQL '{}' on [{}]", sql, shardName);
     }
diff --git 
a/src/second-storage/clickhouse/src/test/java/io/kyligence/kap/clickhouse/job/ClickHouseTest.java
 
b/src/second-storage/clickhouse/src/test/java/io/kyligence/kap/clickhouse/job/ClickHouseTest.java
index b3d8e27c04..60ca087f0e 100644
--- 
a/src/second-storage/clickhouse/src/test/java/io/kyligence/kap/clickhouse/job/ClickHouseTest.java
+++ 
b/src/second-storage/clickhouse/src/test/java/io/kyligence/kap/clickhouse/job/ClickHouseTest.java
@@ -23,6 +23,7 @@ import io.kyligence.kap.secondstorage.SecondStorageNodeHelper;
 import io.kyligence.kap.secondstorage.config.ClusterInfo;
 import io.kyligence.kap.secondstorage.config.Node;
 import lombok.val;
+import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -33,10 +34,11 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-public class ClickHouseTest {
+public class ClickHouseTest extends NLocalFileMetadataTestCase {
 
     @Before
     public void setUp() throws Exception {
+        createTestMetadata();
         initNodeHelper();
     }
 
@@ -66,7 +68,8 @@ public class ClickHouseTest {
     @Test
     public void extractParam() {
         val param = 
ClickHouse.extractParam(SecondStorageNodeHelper.resolve("node01"));
-        Assert.assertEquals(2, param.size());
+        Assert.assertEquals(3, param.size());
+        Assert.assertEquals("3", param.get("connect_timeout"));
         val param2 = 
ClickHouse.extractParam(SecondStorageNodeHelper.resolve("node03"));
         Assert.assertEquals(0, param2.size());
     }
@@ -82,5 +85,8 @@ public class ClickHouseTest {
         Assert.assertEquals(properties.get(ClickHouse.SOCKET_TIMEOUT), 
cluster.getSocketTimeout());
         Assert.assertEquals(properties.get(ClickHouse.USER), node.getUser());
         Assert.assertEquals(properties.get(ClickHouse.PASSWORD), 
node.getPassword());
+
+        String url = ClickHouse.buildUrl(node.getIp(), node.getPort(), 
properties);
+        
Assert.assertEquals("jdbc:clickhouse://127.0.0.1:9000?socket_timeout=600000&keepAliveTimeout=600000&password=123456&user=default&connect_timeout=3",
 url);
     }
 }
\ No newline at end of file

Reply via email to