You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by xx...@apache.org on 2022/12/16 07:01:46 UTC

[kylin] 15/15: KYLIN-5362 Editing agg-groups doesn't produce extra meaningless indexes

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 76d574818f142c81ae4a4a6176222241c36f6578
Author: fanshu.kong <17...@qq.com>
AuthorDate: Tue Oct 25 16:44:54 2022 +0800

    KYLIN-5362 Editing agg-groups doesn't produce extra meaningless indexes
    
    from 38573
    
    Co-authored-by: fanshu.kong <17...@qq.com>
---
 .../kylin/metadata/cube/model/RuleBasedIndex.java  |  2 +-
 .../cube/model/RuleBasedCuboidDescTest.java        | 25 ++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

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 03c3d128e5..88fe1715a0 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
@@ -528,7 +528,7 @@ public class RuleBasedIndex implements Serializable {
     private void calculateCurrentSortedList(Map<Integer, Integer> mergedAndSortedIndexMap,
             List<Integer> currentSortedList, int dimensionId) {
         boolean needToAppendToTail = true;
-        Set<Integer> currentSortedSet = Sets.newHashSet(currentSortedList);
+        Set<Integer> currentSortedSet = Sets.newLinkedHashSet(currentSortedList);
         if (currentSortedSet.contains(dimensionId)) {
             return;
         }
diff --git a/src/core-metadata/src/test/java/org/apache/kylin/metadata/cube/model/RuleBasedCuboidDescTest.java b/src/core-metadata/src/test/java/org/apache/kylin/metadata/cube/model/RuleBasedCuboidDescTest.java
index 7663330e52..404258a670 100644
--- a/src/core-metadata/src/test/java/org/apache/kylin/metadata/cube/model/RuleBasedCuboidDescTest.java
+++ b/src/core-metadata/src/test/java/org/apache/kylin/metadata/cube/model/RuleBasedCuboidDescTest.java
@@ -28,6 +28,7 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.JsonUtil;
 import org.apache.kylin.common.util.NLocalFileMetadataTestCase;
+import org.apache.kylin.cube.model.SelectRule;
 import org.apache.kylin.metadata.cube.CubeTestUtils;
 import org.apache.kylin.metadata.cube.cuboid.NAggregationGroup;
 import org.hamcrest.CoreMatchers;
@@ -35,6 +36,7 @@ import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.springframework.test.util.ReflectionTestUtils;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -908,6 +910,29 @@ public class RuleBasedCuboidDescTest extends NLocalFileMetadataTestCase {
         });
     }
 
+    @Test
+    public void testCalculateDimSortedList() throws Exception {
+
+        NAggregationGroup aggregationGroup1 = new NAggregationGroup();
+        aggregationGroup1.setIncludes(new Integer[] { 5, 18 });
+        aggregationGroup1.setMeasures(new Integer[] { 10000 });
+        SelectRule selectRule1 = new SelectRule();
+        selectRule1.setMandatoryDims(new Integer[] {});
+        aggregationGroup1.setSelectRule(selectRule1);
+
+        NAggregationGroup aggregationGroup2 = new NAggregationGroup();
+        aggregationGroup2.setIncludes(new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18 });
+        aggregationGroup2.setMeasures(new Integer[] { 10000 });
+        SelectRule selectRule2 = new SelectRule();
+        selectRule2.setMandatoryDims(new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18 });
+        aggregationGroup2.setSelectRule(selectRule2);
+
+        RuleBasedIndex ruleBasedIndex = new RuleBasedIndex();
+        List<Integer> lists = ReflectionTestUtils.invokeMethod(ruleBasedIndex, "recomputeSortedDimensions",
+                Lists.newArrayList(aggregationGroup1, aggregationGroup2));
+        Assert.assertEquals("[1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18]", lists.toString());
+    }
+
     private NIndexPlanManager getIndexPlanManager() {
         return NIndexPlanManager.getInstance(getTestConfig(), "default");
     }