This is an automated email from the ASF dual-hosted git repository. yhcast0 pushed a commit to branch kylin5 in repository https://gitbox.apache.org/repos/asf/kylin.git
commit 7923a5ebfbafbdad4a5a802f9330f4ef9e5e5ff9 Author: Yinghao Lin <[email protected]> AuthorDate: Tue Jun 2 10:54:05 2026 +0800 [MINOR] Fix UT --- .../kylin/metadata/cube/model/RuleBasedIndex.java | 4 ++-- .../kylin/metadata/cube/NIndexPlanManagerTest.java | 5 +++-- .../kylin/rest/service/IndexPlanServiceTest.java | 19 ++++++++++------- .../service/ModelServiceSemanticUpdateTest.java | 5 ++++- .../kylin/rest/service/TableReloadServiceTest.java | 5 ++--- .../apache/kylin/rec/index/IndexSuggesterTest.java | 24 +++++++++++++--------- .../engine/spark/job/NSparkExecutableTest.java | 2 +- .../query/plugin/profiler/AsyncProfilingTest.scala | 2 +- .../BuildAsyncProfilerDriverPluginTest.scala | 2 +- 9 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/RuleBasedIndex.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/RuleBasedIndex.java index d7df7ecff2..0eab1316c9 100644 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/RuleBasedIndex.java +++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/RuleBasedIndex.java @@ -308,7 +308,7 @@ public class RuleBasedIndex implements Serializable { private Set<LayoutEntity> genCuboidLayouts(Set<LayoutEntity> previousLayouts, Set<LayoutEntity> needDelLayouts, boolean excludeDel, boolean useCostBasedList) { - Set<LayoutEntity> genLayouts = Sets.newHashSet(); + Set<LayoutEntity> genLayouts = Sets.newLinkedHashSet(); Map<LayoutEntity, Long> existLayouts = Maps.newHashMap(); previousLayouts.forEach(layout -> existLayouts.put(layout, layout.getId())); @@ -397,7 +397,7 @@ public class RuleBasedIndex implements Serializable { private Set<LayoutEntity> tryLayoutsOfCostBasedPlanner(boolean useCostBasedList, Set<LayoutEntity> genLayouts) { if (useCostBasedList && layoutsOfCostBasedList != null) { // use the recommend white list id - Set<LayoutEntity> result = Sets.newHashSet(); + Set<LayoutEntity> result = Sets.newLinkedHashSet(); genLayouts.stream().forEach(layout -> { if (layoutsOfCostBasedList.contains(layout.getId())) { result.add(layout); diff --git a/src/core-metadata/src/test/java/org/apache/kylin/metadata/cube/NIndexPlanManagerTest.java b/src/core-metadata/src/test/java/org/apache/kylin/metadata/cube/NIndexPlanManagerTest.java index f4f102eeaa..4181926b74 100644 --- a/src/core-metadata/src/test/java/org/apache/kylin/metadata/cube/NIndexPlanManagerTest.java +++ b/src/core-metadata/src/test/java/org/apache/kylin/metadata/cube/NIndexPlanManagerTest.java @@ -241,8 +241,9 @@ public class NIndexPlanManagerTest { }); val plan = manager.getIndexPlan(modelId); - Assert.assertEquals("[1, 1030002, 1010001, 1080002, 1070002, 1090001, 1100001, 1020001, 1040001]", - plan.getAllLayouts().stream().map(LayoutEntity::getId).collect(Collectors.toList()).toString()); + Assert.assertEquals("[1, 1010001, 1020001, 1030002, 1040001, 1070002, 1080002, 1090001, 1100001]", + plan.getAllLayouts().stream().map(LayoutEntity::getId).sorted() + .collect(Collectors.toList()).toString()); } @Test diff --git a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/IndexPlanServiceTest.java b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/IndexPlanServiceTest.java index 5da71df418..b2477e3753 100644 --- a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/IndexPlanServiceTest.java +++ b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/IndexPlanServiceTest.java @@ -1327,13 +1327,18 @@ public class IndexPlanServiceTest extends SourceTestCase { List<LayoutEntity> ruleBaseLayouts = dataflowManager.getDataflow("89af4ee2-2cdb-4b07-b39e-4c29856309aa") .getIndexPlan().getRuleBaseLayouts(); Assert.assertEquals(7L, ruleBaseLayouts.size()); - Assert.assertEquals("[1, 2, 10000]", ruleBaseLayouts.get(0).getColOrder().toString()); - Assert.assertEquals("[5, 6, 7, 10000, 10001]", ruleBaseLayouts.get(1).getColOrder().toString()); - Assert.assertEquals("[1, 3, 10000]", ruleBaseLayouts.get(2).getColOrder().toString()); - Assert.assertEquals("[1, 4, 10000]", ruleBaseLayouts.get(3).getColOrder().toString()); - Assert.assertEquals("[1, 10000]", ruleBaseLayouts.get(4).getColOrder().toString()); - Assert.assertEquals("[5, 10000, 10001]", ruleBaseLayouts.get(5).getColOrder().toString()); - Assert.assertEquals("[1, 2, 3, 4, 5, 6, 7, 10000, 10001]", ruleBaseLayouts.get(6).getColOrder().toString()); + Set<String> actualColOrders = ruleBaseLayouts.stream()// + .map(l -> l.getColOrder().toString())// + .collect(Collectors.toSet()); + Set<String> expectedColOrders = Sets.newHashSet(// + "[1, 2, 10000]", // + "[5, 6, 7, 10000, 10001]", // + "[1, 3, 10000]", // + "[1, 4, 10000]", // + "[1, 10000]", // + "[5, 10000, 10001]", // + "[1, 2, 3, 4, 5, 6, 7, 10000, 10001]"); + Assert.assertEquals(expectedColOrders, actualColOrders); } @Test diff --git a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceSemanticUpdateTest.java b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceSemanticUpdateTest.java index 2e52098133..d9b1ded153 100644 --- a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceSemanticUpdateTest.java +++ b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/ModelServiceSemanticUpdateTest.java @@ -1681,7 +1681,10 @@ public class ModelServiceSemanticUpdateTest extends NLocalFileMetadataTestCase { } // add layout to blacklist which is auto and manual, will not remove datalayout from segment - val blacklist4 = Lists.newArrayList(indexPlan.getRuleBaseLayouts().get(0).getId()); + val whitelistIds = indexPlan.getWhitelistLayouts().stream().map(LayoutEntity::getId) + .collect(Collectors.toSet()); + val blacklist4 = Lists.newArrayList(indexPlan.getRuleBaseLayouts().stream() + .filter(l -> whitelistIds.contains(l.getId())).findFirst().get().getId()); updatedPlan = semanticService.addRuleBasedIndexBlackListLayouts(indexPlan, blacklist4); Assert.assertEquals(updatedPlan.getAllLayouts().size() + 2, indexPlan.getAllLayouts().size()); val df4 = dataflowManager.getDataflow(dataflow.getId()); diff --git a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/TableReloadServiceTest.java b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/TableReloadServiceTest.java index 922bd0bd21..e70f7dc241 100644 --- a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/TableReloadServiceTest.java +++ b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/TableReloadServiceTest.java @@ -345,9 +345,8 @@ public class TableReloadServiceTest extends CSVSourceTestCase { val indexManager = NIndexPlanManager.getInstance(getTestConfig(), PROJECT); val indexPlan = indexManager.getIndexPlan(MODEL_ID); Assert.assertEquals( - Joiner.on(",") - .join(indexPlan.getAllLayouts().stream().map(LayoutEntity::getId).collect(Collectors.toList())), - ((NSparkCubingJob) executables.get(0)).getTasks().get(0).getParam("layoutIds")); + indexPlan.getAllLayouts().stream().map(layout -> String.valueOf(layout.getId())).collect(Collectors.toSet()), + Sets.newHashSet(((NSparkCubingJob) executables.get(0)).getTasks().get(0).getParam("layoutIds").split(","))); } @Test diff --git a/src/rec-service/src/test/java/org/apache/kylin/rec/index/IndexSuggesterTest.java b/src/rec-service/src/test/java/org/apache/kylin/rec/index/IndexSuggesterTest.java index c5fa47ff18..681e6fcf99 100644 --- a/src/rec-service/src/test/java/org/apache/kylin/rec/index/IndexSuggesterTest.java +++ b/src/rec-service/src/test/java/org/apache/kylin/rec/index/IndexSuggesterTest.java @@ -242,17 +242,21 @@ public class IndexSuggesterTest extends AutoTestOnLearnKylinData { IndexPlan indexPlan = mdCtx.getTargetIndexPlan(); List<IndexEntity> allCuboids = indexPlan.getIndexes(); - final IndexEntity indexEntity0 = allCuboids.get(0); - - Assert.assertEquals("{100000, 100005, 100006}", indexEntity0.getMeasureBitset().toString()); - Assert.assertEquals(1, indexEntity0.getLayouts().size()); - Assert.assertEquals(20001L, indexEntity0.getLayouts().get(0).getId()); + Assert.assertEquals(2, allCuboids.size()); - final IndexEntity indexEntity1 = allCuboids.get(1); - Assert.assertEquals("{100000, 100001, 100002, 100003, 100004, 100007, 100008}", - indexEntity1.getMeasureBitset().toString()); - Assert.assertEquals(1, indexEntity1.getLayouts().size()); - Assert.assertEquals(40001L, indexEntity1.getLayouts().get(0).getId()); + java.util.Set<String> measureBitsets = allCuboids.stream() + .map(e -> e.getMeasureBitset().toString()).collect(java.util.stream.Collectors.toSet()); + Assert.assertTrue(measureBitsets.contains("{100000, 100005, 100006}")); + Assert.assertTrue(measureBitsets.contains("{100000, 100001, 100002, 100003, 100004, 100007, 100008}")); + + for (IndexEntity indexEntity : allCuboids) { + Assert.assertEquals(1, indexEntity.getLayouts().size()); + if (indexEntity.getMeasureBitset().toString().equals("{100000, 100005, 100006}")) { + Assert.assertEquals(20001L, indexEntity.getLayouts().get(0).getId()); + } else { + Assert.assertEquals(40001L, indexEntity.getLayouts().get(0).getId()); + } + } } @Test diff --git a/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/job/NSparkExecutableTest.java b/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/job/NSparkExecutableTest.java index ce369a610a..897827c277 100644 --- a/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/job/NSparkExecutableTest.java +++ b/src/spark-project/engine-spark/src/test/java/org/apache/kylin/engine/spark/job/NSparkExecutableTest.java @@ -186,7 +186,7 @@ public class NSparkExecutableTest extends NLocalFileMetadataTestCase { } overwriteSystemProp("kylin.engine.spark-conf.spark.driver.extraJavaOptions", - "'`touch /tmp/foo.bar` $(touch /tmp/foo.bar)'"); + "`touch /tmp/foo.bar` $(touch /tmp/foo.bar)"); { try { val desc = sparkExecutable.getSparkAppDesc(); diff --git a/src/spark-project/sparder/src/test/scala/org/apache/kylin/query/plugin/profiler/AsyncProfilingTest.scala b/src/spark-project/sparder/src/test/scala/org/apache/kylin/query/plugin/profiler/AsyncProfilingTest.scala index bf3090b65d..4ad3dad6a5 100644 --- a/src/spark-project/sparder/src/test/scala/org/apache/kylin/query/plugin/profiler/AsyncProfilingTest.scala +++ b/src/spark-project/sparder/src/test/scala/org/apache/kylin/query/plugin/profiler/AsyncProfilingTest.scala @@ -30,7 +30,7 @@ import org.mockito.Mockito.mock class AsyncProfilingTest extends SparkPluginWithMeta { val sparkPluginName: String = classOf[BuildAsyncProfilerSparkPlugin].getName - val flagFileDir: String = System.getProperty("java.io.tmpdir") + "default/jobStepId/" + val flagFileDir: String = System.getProperty("java.io.tmpdir") + "/default/jobStepId/" val actionFilePath: String = flagFileDir + "/action" val statusFileName: String = flagFileDir + "/status" val dumpFileName: String = flagFileDir + "/dump.tar.gz" diff --git a/src/spark-project/spark-common/src/test/scala/org/apache/kylin/profiler/BuildAsyncProfilerDriverPluginTest.scala b/src/spark-project/spark-common/src/test/scala/org/apache/kylin/profiler/BuildAsyncProfilerDriverPluginTest.scala index 4aaacd7902..e4e8e08175 100644 --- a/src/spark-project/spark-common/src/test/scala/org/apache/kylin/profiler/BuildAsyncProfilerDriverPluginTest.scala +++ b/src/spark-project/spark-common/src/test/scala/org/apache/kylin/profiler/BuildAsyncProfilerDriverPluginTest.scala @@ -34,7 +34,7 @@ class BuildAsyncProfilerDriverPluginTest extends SparkFunSuite with BeforeAndAft lazy val metaStore: NLocalFileMetadataTestCase = new NLocalFileMetadataTestCase val sparkPluginName: String = classOf[BuildAsyncProfilerSparkPlugin].getName - val flagFileDir: String = System.getProperty("java.io.tmpdir") + "default/jobStepId/" + val flagFileDir: String = System.getProperty("java.io.tmpdir") + "/default/jobStepId/" val actionFilePath: String = flagFileDir + "/action" val statusFileName: String = flagFileDir + "/status" val dumpFileName: String = flagFileDir + "/dump.tar.gz"
