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 89b96f474351d2dbaf9ca5bb756a127ae0b46e85
Author: Yaguang Jia <jiayagu...@foxmail.com>
AuthorDate: Thu Dec 29 14:32:39 2022 +0800

    KYLIN-5452 Optimise constant queries, add cache for getBindable
    
    * KYLIN-5452 Optimise constant queries, add cache for getBindable
    
    * KYLIN-5452 update calcite version
---
 pom.xml                                                |  2 +-
 .../org/apache/kylin/rest/KylinPrepareEnvListener.java |  3 +++
 .../java/org/apache/kylin/common/KylinConfigBase.java  |  7 +++++++
 .../org/apache/kylin/common/KylinConfigBaseTest.java   | 18 ++++++++++++++++++
 4 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 611087bf48..e1a852cf3c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -126,7 +126,7 @@
         <scala-retry>0.3.0</scala-retry>
 
         <!-- Calcite Version -->
-        <calcite.version>1.116.0-kylin-4.x-r024</calcite.version>
+        <calcite.version>1.116.0-kylin-4.x-r025</calcite.version>
         <avatica.version>4.x_1.10-r01</avatica.version>
 
         <!-- Hadoop Common deps, keep compatible with hadoop2.version -->
diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
index 0109c7fea5..483acca4b9 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
@@ -81,6 +81,9 @@ public class KylinPrepareEnvListener implements 
EnvironmentPostProcessor, Ordere
         } else {
             Unsafe.setProperty("calcite.convert-multiple-columns-in-to-or", 
"false");
         }
+        Unsafe.setProperty("calcite.bindable.cache.maxSize", 
Integer.toString(config.getCalciteBindableCacheSize()));
+        Unsafe.setProperty("calcite.bindable.cache.concurrencyLevel",
+                
Integer.toString(config.getCalciteBindableCacheConcurrencyLevel()));
 
         TimeZoneUtils.setDefaultTimeZone(config);
         DelegationTokenManager delegationTokenManager = new 
DelegationTokenManager();
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 773fa0af0f..f6b9622033 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
@@ -2469,6 +2469,13 @@ public abstract class KylinConfigBase implements 
Serializable {
         return 
Boolean.parseBoolean(getOptional("kylin.query.calcite.aggregate-pushdown-enabled",
 FALSE));
     }
 
+    public int getCalciteBindableCacheSize() {
+        return 
Integer.parseInt(getOptional("kylin.query.calcite.bindable.cache.maxSize", 
"10"));
+    }
+    public int getCalciteBindableCacheConcurrencyLevel() {
+        return 
Integer.parseInt(getOptional("kylin.query.calcite.bindable.cache.concurrencyLevel",
 "5"));
+    }
+
     public int getEventPollIntervalSecond() {
         return 
Integer.parseInt(getOptional("kylin.job.event.poll-interval-second", "60"));
     }
diff --git 
a/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
 
b/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
index a241b73b4c..23f39ccd1f 100644
--- 
a/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
+++ 
b/src/core-common/src/test/java/org/apache/kylin/common/KylinConfigBaseTest.java
@@ -943,6 +943,10 @@ class KylinConfigBaseTest {
                 new 
PropertiesEntity("kylin.metrics.hdfs-periodic-calculation-interval", "5m", 
300000L));
         map.put("isSkipResourceCheck",
                 new 
PropertiesEntity("kylin.build.resource.skip-resource-check", "false", false));
+        map.put("getCalciteBindableCacheSize",
+                new 
PropertiesEntity("kylin.query.calcite.bindable.cache.maxSize", "10", 10));
+        map.put("getCalciteBindableCacheConcurrencyLevel",
+                new 
PropertiesEntity("kylin.query.calcite.bindable.cache.concurrencyLevel", "5", 
5));
     }
 
     @Test
@@ -1400,6 +1404,20 @@ class KylinConfigBaseTest {
         config.setProperty("kylin.storage.check-quota-enabled", "true");
         assertTrue(config.isStorageQuotaEnabled());
     }
+    @Test
+    void testCalciteBindableCacheSize() {
+        KylinConfig config = KylinConfig.getInstanceFromEnv();
+        assertEquals(10, config.getCalciteBindableCacheSize());
+        config.setProperty("kylin.query.calcite.bindable.cache.maxSize", "7");
+        assertEquals(7, config.getCalciteBindableCacheSize());
+    }
+    @Test
+    void testCalciteBindableCacheConcurrencyLevel() {
+        KylinConfig config = KylinConfig.getInstanceFromEnv();
+        assertEquals(5, config.getCalciteBindableCacheConcurrencyLevel());
+        
config.setProperty("kylin.query.calcite.bindable.cache.concurrencyLevel", "3");
+        assertEquals(3, config.getCalciteBindableCacheConcurrencyLevel());
+    }
 }
 
 class EnvironmentUpdateUtils {

Reply via email to