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 {