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 2023/06/13 08:29:24 UTC

[kylin] 04/37: KYLIN-5555 Fix get effective layouts from all ready segments instead of from the latest ready segment when editing model.

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 <39...@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));