From 8f7da38f148f2a44f17c21b4e45f830ac67e374b Mon Sep 17 00:00:00 2001 From: "Ma,Gang" Date: Tue, 4 Sep 2018 17:39:56 +0800 Subject: [PATCH] KYLIN-3536 PrepareStatement cache issue when there are new segments built --- .../org/apache/kylin/rest/service/QueryService.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 22588fb..65054c4 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 @@ -74,6 +74,7 @@ import org.apache.kylin.common.util.DBUtils; import org.apache.kylin.common.util.JsonUtil; import org.apache.kylin.common.util.Pair; import org.apache.kylin.common.util.SetThreadName; +import org.apache.kylin.cube.CubeInstance; import org.apache.kylin.cube.CubeManager; import org.apache.kylin.cube.cuboid.Cuboid; import org.apache.kylin.metadata.badquery.BadQueryEntry; @@ -89,6 +90,7 @@ import org.apache.kylin.metadata.querymeta.ColumnMetaWithType; import org.apache.kylin.metadata.querymeta.SelectedColumnMeta; import org.apache.kylin.metadata.querymeta.TableMeta; import org.apache.kylin.metadata.querymeta.TableMetaWithType; +import org.apache.kylin.metadata.realization.IRealization; import org.apache.kylin.query.QueryConnection; import org.apache.kylin.query.relnode.OLAPContext; import org.apache.kylin.query.util.PushDownUtil; @@ -109,6 +111,8 @@ import org.apache.kylin.rest.util.AclEvaluate; import org.apache.kylin.rest.util.AclPermissionUtil; import org.apache.kylin.rest.util.QueryRequestLimits; import org.apache.kylin.rest.util.TableauInterceptor; +import org.apache.kylin.storage.hybrid.HybridInstance; +import org.apache.kylin.storage.hybrid.HybridManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -593,6 +597,7 @@ public class QueryService extends BasicService { preparedContext = createPreparedContext(sqlRequest.getProject(), sqlRequest.getSql()); } for (OLAPContext olapContext : preparedContext.olapContexts) { + resetRealizationInContext(olapContext); OLAPContext.registerContext(olapContext); } } else { @@ -613,6 +618,20 @@ public class QueryService extends BasicService { } } + private void resetRealizationInContext(OLAPContext olapContext) { + IRealization realization = olapContext.realization; + KylinConfig config = getConfig(); + HybridInstance hybridInstance = HybridManager.getInstance(config).getHybridInstance(realization.getName()); + if (hybridInstance != null) { + olapContext.realization = hybridInstance; + return; + } + CubeInstance cubeInstance = CubeManager.getInstance(config).getCube(realization.getName()); + if (cubeInstance != null) { + olapContext.realization = cubeInstance; + } + } + protected List getMetadata(CubeManager cubeMgr, String project) throws SQLException { Connection conn = null; -- 2.6.4