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