You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2018/10/29 11:27:57 UTC

[kylin] 05/12: KYLIN-2896 remove query exception cache

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

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

commit 6b5f961724e4b7964dbc1b268a200095d0fbe30d
Author: Zhong <nj...@apache.org>
AuthorDate: Thu Oct 18 17:22:22 2018 +0800

    KYLIN-2896 remove query exception cache
---
 .../apache/kylin/rest/service/CacheService.java    |  6 +--
 .../apache/kylin/rest/service/QueryService.java    | 58 +++++++++-------------
 2 files changed, 26 insertions(+), 38 deletions(-)

diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java b/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java
index 930852b..9904cef 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/CacheService.java
@@ -118,12 +118,10 @@ public class CacheService extends BasicService implements InitializingBean {
     public void cleanDataCache(String project) {
         if (cacheManager != null) {
             if (getConfig().isQueryCacheSignatureEnabled()) {
-                logger.info("cleaning cache for project " + project + " (currently remove exception entries)");
-                cacheManager.getCache(QueryService.EXCEPTION_QUERY_CACHE).removeAll();
+                logger.info("cleaning cache for project " + project + " (currently remove nothing)");
             } else {
                 logger.info("cleaning cache for project " + project + " (currently remove all entries)");
-                cacheManager.getCache(QueryService.SUCCESS_QUERY_CACHE).removeAll();
-                cacheManager.getCache(QueryService.EXCEPTION_QUERY_CACHE).removeAll();
+                cacheManager.getCache(QueryService.QUERY_CACHE).removeAll();
             }
         } else {
             logger.warn("skip cleaning cache for project " + project);
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
index d0ba4da..abcab7f 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
@@ -135,8 +135,7 @@ import com.google.common.collect.Lists;
 @Component("queryService")
 public class QueryService extends BasicService {
 
-    public static final String SUCCESS_QUERY_CACHE = "StorageCache";
-    public static final String EXCEPTION_QUERY_CACHE = "ExceptionQueryCache";
+    public static final String QUERY_CACHE = "StorageCache";
     public static final String QUERY_STORE_PATH_PREFIX = "/query/";
     private static final Logger logger = LoggerFactory.getLogger(QueryService.class);
     final BadQueryDetector badQueryDetector = new BadQueryDetector();
@@ -481,7 +480,7 @@ public class QueryService extends BasicService {
                     && checkCondition(sqlResponse.getResults().size() < kylinConfig.getLargeQueryThreshold(),
                             "query response is too large: {} ({})", sqlResponse.getResults().size(),
                             kylinConfig.getLargeQueryThreshold())) {
-                cacheManager.getCache(SUCCESS_QUERY_CACHE).put(sqlRequest.getCacheKey(), sqlResponse);
+                cacheManager.getCache(QUERY_CACHE).put(sqlRequest.getCacheKey(), sqlResponse);
             }
 
         } catch (Throwable e) { // calcite may throw AssertError
@@ -495,7 +494,7 @@ public class QueryService extends BasicService {
 
             if (queryCacheEnabled && e.getCause() != null
                     && ExceptionUtils.getRootCause(e) instanceof ResourceLimitExceededException) {
-                Cache exceptionCache = cacheManager.getCache(EXCEPTION_QUERY_CACHE);
+                Cache exceptionCache = cacheManager.getCache(QUERY_CACHE);
                 exceptionCache.put(sqlRequest.getCacheKey(), sqlResponse);
             }
         }
@@ -521,37 +520,28 @@ public class QueryService extends BasicService {
     }
 
     public SQLResponse searchQueryInCache(SQLRequest sqlRequest) {
-        String[] cacheTypes = new String[] { EXCEPTION_QUERY_CACHE, SUCCESS_QUERY_CACHE };
-        for (String cacheType : cacheTypes) {
-            Cache cache = cacheManager.getCache(cacheType);
-            Cache.ValueWrapper wrapper = cache.get(sqlRequest.getCacheKey());
-            if (wrapper == null) {
-                continue;
-            }
-            SQLResponse response = (SQLResponse) wrapper.get();
-            if (response == null) {
-                return null;
-            }
-            logger.info("The sqlResponse is found in " + cacheType);
-            if (getConfig().isQueryCacheSignatureEnabled()
-                    && !SQLResponseSignatureUtil.checkSignature(getConfig(), response, sqlRequest.getProject())) {
-                logger.info("The sql response signature is changed. Remove it from QUERY_CACHE.");
-                cache.evict(sqlRequest.getCacheKey());
-                return null;
-            } else {
-                switch (cacheType) {
-                case EXCEPTION_QUERY_CACHE:
-                    response.setHitExceptionCache(true);
-                    break;
-                case SUCCESS_QUERY_CACHE:
-                    response.setStorageCacheUsed(true);
-                    break;
-                default:
-                }
-            }
-            return response;
+        Cache cache = cacheManager.getCache(QUERY_CACHE);
+        Cache.ValueWrapper wrapper = cache.get(sqlRequest.getCacheKey());
+        if (wrapper == null) {
+            return null;
         }
-        return null;
+        SQLResponse response = (SQLResponse) wrapper.get();
+        if (response == null) {
+            return null;
+        }
+        logger.info("The sqlResponse is found in QUERY_CACHE");
+        if (getConfig().isQueryCacheSignatureEnabled()
+                && !SQLResponseSignatureUtil.checkSignature(getConfig(), response, sqlRequest.getProject())) {
+            logger.info("The sql response signature is changed. Remove it from QUERY_CACHE.");
+            cache.evict(sqlRequest.getCacheKey());
+            return null;
+        }
+        if (response.getIsException()) {
+            response.setHitExceptionCache(true);
+        } else {
+            response.setStorageCacheUsed(true);
+        }
+        return response;
     }
 
     private SQLResponse queryWithSqlMassage(SQLRequest sqlRequest) throws Exception {