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 b61ce536d05446a230b735472027511f463b6d7a
Author: huangsheng <huangshen...@163.com>
AuthorDate: Wed Feb 1 15:56:33 2023 +0800

    KYLIN-5498 Fixed a bug where click Save and build btn and not pull up a 
build-task after changing the multil partition model to a full model
---
 .../kylin/rest/service/ModelSemanticHelper.java    | 36 ++++++++++++++--------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelSemanticHelper.java
 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelSemanticHelper.java
index 54190bcd77..725d3994f6 100644
--- 
a/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelSemanticHelper.java
+++ 
b/src/modeling-service/src/main/java/org/apache/kylin/rest/service/ModelSemanticHelper.java
@@ -58,6 +58,7 @@ import org.apache.kylin.job.model.JobParam;
 import org.apache.kylin.metadata.cube.cuboid.NAggregationGroup;
 import org.apache.kylin.metadata.cube.model.IndexPlan;
 import org.apache.kylin.metadata.cube.model.LayoutEntity;
+import org.apache.kylin.metadata.cube.model.NDataflow;
 import org.apache.kylin.metadata.cube.model.NDataflowManager;
 import org.apache.kylin.metadata.cube.model.NIndexPlanManager;
 import org.apache.kylin.metadata.cube.model.RuleBasedIndex;
@@ -966,6 +967,22 @@ public class ModelSemanticHelper extends BasicService {
         return SourceFactory.getSource(tableDesc).getSegmentRange(start, end);
     }
 
+
+    private void handleDatePartitionColumn(NDataModel newModel, 
NDataflowManager dataflowManager, NDataflow df,
+            String modelId, String project, String start, String end) {
+        // from having partition to no partition
+        if (newModel.getPartitionDesc() == null) {
+            dataflowManager.fillDfManually(df,
+                    
Lists.newArrayList(SegmentRange.TimePartitionedSegmentRange.createInfinite()));
+            return;
+        }
+            // change partition column and from no partition to having 
partition
+        if (StringUtils.isNotEmpty(start) && StringUtils.isNotEmpty(end)) {
+            dataflowManager.fillDfManually(df,
+                    Lists.newArrayList(getSegmentRangeByModel(project, 
modelId, start, end)));
+        }
+    }
+
     private void handleReloadData(NDataModel newModel, NDataModel oriModel, 
String project, String start, String end) {
         val config = KylinConfig.getInstanceFromEnv();
         val dataflowManager = NDataflowManager.getInstance(config, project);
@@ -981,27 +998,22 @@ public class ModelSemanticHelper extends BasicService {
         String modelId = newModel.getUuid();
         NDataModelManager modelManager = NDataModelManager.getInstance(config, 
project);
         if (newModel.isMultiPartitionModel() || 
oriModel.isMultiPartitionModel()) {
-            boolean isPartitionChange = 
!isMultiPartitionDescSame(oriModel.getMultiPartitionDesc(),
+            boolean isMultiPartitionChange = 
!isMultiPartitionDescSame(oriModel.getMultiPartitionDesc(),
                     newModel.getMultiPartitionDesc())
                     || !Objects.equals(oriModel.getPartitionDesc(), 
newModel.getPartitionDesc());
-            if (isPartitionChange && newModel.isMultiPartitionModel()) {
+            if (isMultiPartitionChange && newModel.isMultiPartitionModel()) {
                 modelManager.updateDataModel(modelId, copyForWrite -> {
                     copyForWrite.setMultiPartitionDesc(
                             new 
MultiPartitionDesc(newModel.getMultiPartitionDesc().getColumns()));
                 });
             }
+            // Case where the date partition column of the multi partition 
model has also been changed
+            if (!Objects.equals(oriModel.getPartitionDesc(), 
newModel.getPartitionDesc())) {
+                handleDatePartitionColumn(newModel, dataflowManager, df, 
modelId, project, start, end);
+            }
         } else {
             if (!Objects.equals(oriModel.getPartitionDesc(), 
newModel.getPartitionDesc())) {
-
-                // from having partition to no partition
-                if (newModel.getPartitionDesc() == null) {
-                    dataflowManager.fillDfManually(df,
-                            
Lists.newArrayList(SegmentRange.TimePartitionedSegmentRange.createInfinite()));
-                    // change partition column and from no partition to having 
partition
-                } else if (StringUtils.isNotEmpty(start) && 
StringUtils.isNotEmpty(end)) {
-                    dataflowManager.fillDfManually(df,
-                            Lists.newArrayList(getSegmentRangeByModel(project, 
modelId, start, end)));
-                }
+                handleDatePartitionColumn(newModel, dataflowManager, df, 
modelId, project, start, end);
             } else {
                 List<SegmentRange> segmentRanges = Lists.newArrayList();
                 segments.forEach(segment -> 
segmentRanges.add(segment.getSegRange()));

Reply via email to