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 1a286ea3342be8292bd6238d3a32935627d15366
Author: Yinghao Lin <39019287+yhca...@users.noreply.github.com>
AuthorDate: Mon Mar 6 11:14:59 2023 +0800

    KYLIN-5555 Fix get effective layouts from all ready segments instead of 
from the latest ready segment when editing model.
---
 .../main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java  | 7 ++++---
 .../main/java/org/apache/kylin/rest/service/IndexPlanService.java  | 7 +++----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java
index b2f70ee752..56cdf0df6f 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/cube/model/IndexPlan.java
@@ -657,14 +657,15 @@ public class IndexPlan extends RootPersistentEntity 
implements Serializable, IEn
 
         NDataflow df = NDataflowManager.getInstance(config, 
project).getDataflow(indexPlanId);
         val readySegs = df.getSegments(SegmentStatusEnum.READY, 
SegmentStatusEnum.WARNING);
-        NDataSegment lastReadySegment = readySegs.getLatestReadySegment();
-        if (null == lastReadySegment) {
+        if (readySegs.isEmpty()) {
             return;
         }
 
+        Set<Long> effectiveLayouts = readySegs.stream().flatMap(seg -> 
seg.getLayoutIds().stream())
+                .collect(Collectors.toSet());
         val toBeDeletedMap = getToBeDeletedIndexesMap();
         for (LayoutEntity layoutEntity : toBeDeletedSet) {
-            if (null == lastReadySegment.getLayout(layoutEntity.getId())
+            if (!effectiveLayouts.contains(layoutEntity.getId())
                     && 
!secondStorageLayoutStatus.getOrDefault(layoutEntity.getId(), false)) {
                 continue;
             }
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 767b098dd5..4795883c5c 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
@@ -1215,12 +1215,11 @@ public class IndexPlanService extends BasicService 
implements TableIndexPlanSupp
         if (readySegs.isEmpty()) {
             removeIndexes(project, modelId, needDelete);
         } else {
-            NDataSegment segment = readySegs.getLatestReadySegment();
+            Set<Long> effectiveLayouts = readySegs.stream().flatMap(seg -> 
seg.getLayoutIds().stream())
+                    .collect(Collectors.toSet());
 
             for (long layoutId : needDelete) {
-                NDataLayout dataLayout = segment.getLayout(layoutId);
-                // may no data before the last ready segments but have a add 
cuboid job.
-                if (null == dataLayout && !isSecondStorageLayoutReady(project, 
modelId, layoutId)) {
+                if (!effectiveLayouts.contains(layoutId) && 
!isSecondStorageLayoutReady(project, modelId, layoutId)) {
                     removeIndex(project, modelId, layoutId);
                 } else {
                     addIndexToBeDeleted(project, modelId, 
Sets.newHashSet(layoutId));

Reply via email to