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";