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