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 d7269e764109a32664e48a56bfd9484192e1cf9c Author: Shuai li <loney...@live.cn> AuthorDate: Thu Oct 20 11:50:44 2022 +0800 fix ts query pushdown after force ts Co-authored-by: shuai.li <shuai...@kyligence.io> --- .../engine/exec/sparder/SparderQueryPlanExec.java | 8 ++++ .../kap/secondstorage/SecondStorageLockTest.java | 50 ++++++++++++++++------ 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/query/src/main/java/org/apache/kylin/query/engine/exec/sparder/SparderQueryPlanExec.java b/src/query/src/main/java/org/apache/kylin/query/engine/exec/sparder/SparderQueryPlanExec.java index bbe7d25192..225c110baf 100644 --- a/src/query/src/main/java/org/apache/kylin/query/engine/exec/sparder/SparderQueryPlanExec.java +++ b/src/query/src/main/java/org/apache/kylin/query/engine/exec/sparder/SparderQueryPlanExec.java @@ -124,6 +124,7 @@ public class SparderQueryPlanExec implements QueryPlanExec { } QueryContext.current().setLastFailed(true); cause = retryException; + checkOnlyTsAnswer(); } } if (forceTableIndexAtException(e)) { @@ -207,4 +208,11 @@ public class SparderQueryPlanExec implements QueryPlanExec { } } } + + private void checkOnlyTsAnswer() { + if (QueryContext.current().getForcedToTieredStorage() == ForceToTieredStorage.CH_FAIL_TO_RETURN) { + throw new KylinException(QueryErrorCode.FORCED_TO_TIEREDSTORAGE_RETURN_ERROR, + MsgPicker.getMsg().getForcedToTieredstorageReturnError()); + } + } } diff --git a/src/second-storage/clickhouse-it/src/test/java/io/kyligence/kap/secondstorage/SecondStorageLockTest.java b/src/second-storage/clickhouse-it/src/test/java/io/kyligence/kap/secondstorage/SecondStorageLockTest.java index ffb4340233..006c03a3ee 100644 --- a/src/second-storage/clickhouse-it/src/test/java/io/kyligence/kap/secondstorage/SecondStorageLockTest.java +++ b/src/second-storage/clickhouse-it/src/test/java/io/kyligence/kap/secondstorage/SecondStorageLockTest.java @@ -2511,7 +2511,9 @@ public class SecondStorageLockTest implements JobWaiter { final String catalog = "default"; Unsafe.setProperty(ClickHouseLoad.SOURCE_URL, getSourceUrl()); Unsafe.setProperty(ClickHouseLoad.ROOT_PATH, getLocalWorkingDirectory()); - configClickhouseWith(new JdbcDatabaseContainer[] { clickhouse1, clickhouse2 }, 1, catalog, () -> { + val container = new JdbcDatabaseContainer[] { clickhouse1, clickhouse2 }; + int replica = 1; + configClickhouseWith(container, 1, catalog, () -> { secondStorageService.changeProjectSecondStorageState(getProject(), SecondStorageNodeHelper.getAllPairs(), true); Assert.assertEquals(2, SecondStorageUtil.listProjectNodes(getProject()).size()); @@ -2525,6 +2527,8 @@ public class SecondStorageLockTest implements JobWaiter { String sql = "select CAL_DT from TEST_KYLIN_FACT where CAL_DT between '2012-01-01' and '2012-01-02'"; Map<String, Map<String, Boolean>> nodeStatusMap; + testForceToTSAndChDown(sql, container, replica); + { // testGroupNodeDownForceToTierStorageOK clearQueryContext(); @@ -2606,28 +2610,46 @@ public class SecondStorageLockTest implements JobWaiter { } triggerClickHouseJob(getDataFlow()); } - - { - testReverseForceToTierStorageWhenCHUnavailable(sql); - } - - { - testReverseForceToTierStorageWhenCHOK(sql); - } - + + testReverseForceToTierStorageWhenCHUnavailable(sql); + testReverseForceToTierStorageWhenCHOK(sql); + //reset status nodeStatusMap = ImmutableMap.of("pair0", ImmutableMap.of("node00", true), "pair1", ImmutableMap.of("node01", true)); secondStorageEndpoint.updateNodeStatus(nodeStatusMap); - { - testForceToTierStorageShutTierStorage(sql); - } - + testForceToTierStorageShutTierStorage(sql); return true; }); } } + + @SneakyThrows + private void testForceToTSAndChDown(String sql, JdbcDatabaseContainer<?>[] container, int replica) { + ExecAndComp.queryModel(getProject(), sql); + OLAPContext.getNativeRealizations().stream().findFirst().ifPresent(r -> assertTrue(r.isSecondStorage())); + + for (JdbcDatabaseContainer<?> clickhouse : container) { + clickhouse.stop(); + } + clearQueryContext(); + QueryContext queryContext = QueryContext.current(); + queryContext.setForcedToTieredStorage(ForceToTieredStorage.CH_FAIL_TO_RETURN); + queryContext.setForceTableIndex(true); + assertThrows(SQLException.class, () -> ExecAndComp.queryModel(getProject(), sql)); + + clearQueryContext(); + queryContext = QueryContext.current(); + queryContext.setForcedToTieredStorage(ForceToTieredStorage.CH_FAIL_TO_DFS); + queryContext.setForceTableIndex(false); + ExecAndComp.queryModel(getProject(), sql); + + for (JdbcDatabaseContainer<?> clickhouse : container) { + clickhouse.start(); + } + ClickHouseUtils.internalConfigClickHouse(container, replica); + } private void testReverseForceToTierStorageWhenCHUnavailable(String sql) { // testReverseForceToTierStorageWhenCHUnavailable