This is an automated email from the ASF dual-hosted git repository.

liyang pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 8929bb820c881e7172eddbc5f6606d04f62a0dd3
Author: Hang Jia <754332...@qq.com>
AuthorDate: Fri Aug 11 11:24:39 2023 +0800

    KYLIN-5780 Dimension capacity of aggGroup does not work
---
 .../kylin/rest/service/FusionIndexService.java     | 10 ++++++++++
 .../kylin/rest/service/IndexPlanService.java       |  2 ++
 .../kylin/rest/service/FusionIndexServiceTest.java | 23 ++++++++++++++++++++++
 3 files changed, 35 insertions(+)

diff --git 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/FusionIndexService.java
 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/FusionIndexService.java
index a7f2c67d68..ee11aa8d83 100644
--- 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/FusionIndexService.java
+++ 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/FusionIndexService.java
@@ -117,6 +117,7 @@ public class FusionIndexService extends BasicService {
 
         if (modelRule != null) {
             
newRuleBasedIndex.getAggregationGroups().addAll(modelRule.getAggregationGroups());
+            newRuleBasedIndex.setGlobalDimCap(modelRule.getGlobalDimCap());
         }
 
         if (model.fusionModelStreamingPart()) {
@@ -126,11 +127,20 @@ public class FusionIndexService extends BasicService {
             if (batchRule != null) {
                 
newRuleBasedIndex.getAggregationGroups().addAll(batchRule.getAggregationGroups().stream()
                         .filter(agg -> agg.getIndexRange() == 
IndexEntity.Range.BATCH).collect(Collectors.toList()));
+                
newRuleBasedIndex.setGlobalDimCap(lastModifiedTimeGlobalDimCap(batchRule, 
modelRule));
             }
         }
         return newRuleBasedIndex;
     }
 
+    private int lastModifiedTimeGlobalDimCap(RuleBasedIndex batchRule, 
RuleBasedIndex modelRule) {
+        if (modelRule == null || (modelRule.getLastModifiedTime() < 
batchRule.getLastModifiedTime())) {
+            return batchRule.getGlobalDimCap();
+        } else {
+            return modelRule.getGlobalDimCap();
+        }
+    }
+
     @Transaction(project = 0)
     public BuildIndexResponse createTableIndex(String project, 
CreateTableIndexRequest request) {
         NDataModel model = getManager(NDataModelManager.class, 
project).getDataModelDesc(request.getModelId());
diff --git 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/IndexPlanService.java
 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/IndexPlanService.java
index 9a50ab5b75..d5acd58ca5 100644
--- 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/IndexPlanService.java
+++ 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/IndexPlanService.java
@@ -798,6 +798,8 @@ public class IndexPlanService extends BasicService 
implements TableIndexPlanSupp
 
         newRuleBasedIndex.setIndexUpdateEnabled(index.getIndexUpdateEnabled());
         newRuleBasedIndex.setAggregationGroups(new LinkedList<>());
+        newRuleBasedIndex.setGlobalDimCap(index.getGlobalDimCap());
+        newRuleBasedIndex.setLastModifiedTime(index.getLastModifiedTime());
 
         for (NAggregationGroup aggGrp : index.getAggregationGroups()) {
             val aggGrpCopy = new NAggregationGroup();
diff --git 
a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/FusionIndexServiceTest.java
 
b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/FusionIndexServiceTest.java
index 52435701a5..9f5efe8296 100644
--- 
a/src/modeling-service/src/test/java/org/apache/kylin/rest/service/FusionIndexServiceTest.java
+++ 
b/src/modeling-service/src/test/java/org/apache/kylin/rest/service/FusionIndexServiceTest.java
@@ -202,6 +202,29 @@ public class FusionIndexServiceTest extends SourceTestCase 
{
         Assert.assertEquals(false, rule1.getIndexUpdateEnabled());
     }
 
+    @Test
+    public void testGetRuleWithGlobalDimCap() {
+        val modelId = "b05034a8-c037-416b-aa26-9e6b4a41ee40";
+        val fusionModelId = "334671fd-e383-4fc9-b5c2-94fce832f77a";
+
+        val indePlanManager = NIndexPlanManager.getInstance(getTestConfig(), 
"streaming_test");
+        indePlanManager.updateIndexPlan(modelId, copy -> 
copy.getRuleBasedIndex().setGlobalDimCap(1));
+        indePlanManager.updateIndexPlan(fusionModelId, copy -> 
copy.getRuleBasedIndex().setGlobalDimCap(2));
+
+        val rule = fusionIndexService.getRule("streaming_test", modelId);
+        Assert.assertEquals(1, rule.getGlobalDimCap());
+
+        indePlanManager.updateIndexPlan(fusionModelId,
+                copy -> 
copy.getRuleBasedIndex().setLastModifiedTime(System.currentTimeMillis() - 
1000));
+        val rule2 = fusionIndexService.getRule("streaming_test", modelId);
+        Assert.assertEquals(2, rule2.getGlobalDimCap());
+
+        indePlanManager.updateIndexPlan(modelId,
+                copy -> 
copy.getRuleBasedIndex().setLastModifiedTime(System.currentTimeMillis()));
+        val rule3 = fusionIndexService.getRule("streaming_test", modelId);
+        Assert.assertEquals(1, rule3.getGlobalDimCap());
+    }
+
     @Test
     public void testUpdateRuleWithBatch() {
         val modelId = "b05034a8-c037-416b-aa26-9e6b4a41ee40";

Reply via email to