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 <nju_y...@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 {