KYLIN-2245 slim ISegment a bit
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0eebd7d8 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0eebd7d8 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0eebd7d8 Branch: refs/heads/master Commit: 0eebd7d8ab10b6b2b4823d6a23eaa774ac36989e Parents: 3ca5395 Author: Li Yang <liy...@apache.org> Authored: Fri Dec 2 17:23:16 2016 +0800 Committer: Li Yang <liy...@apache.org> Committed: Fri Dec 2 17:26:13 2016 +0800 ---------------------------------------------------------------------- .../java/org/apache/kylin/cube/CubeSegment.java | 20 +++----------------- .../apache/kylin/metadata/model/ISegment.java | 1 - .../apache/kylin/metadata/model/Segments.java | 12 +++++++++++- 3 files changed, 14 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/0eebd7d8/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java index 1fc28eb..5339d81 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeSegment.java @@ -38,6 +38,7 @@ import org.apache.kylin.metadata.model.DataModelDesc; import org.apache.kylin.metadata.model.IBuildable; import org.apache.kylin.metadata.model.ISegment; import org.apache.kylin.metadata.model.SegmentStatusEnum; +import org.apache.kylin.metadata.model.Segments; import org.apache.kylin.metadata.model.TblColRef; import org.apache.kylin.metadata.realization.IRealization; @@ -350,29 +351,14 @@ public class CubeSegment implements Comparable<CubeSegment>, IBuildable, ISegmen this.sourceOffsetEnd = sourceOffsetEnd; } - public boolean dateRangeOverlaps(CubeSegment seg) { - return dateRangeStart < seg.dateRangeEnd && seg.dateRangeStart < dateRangeEnd; - } - - public boolean dateRangeContains(CubeSegment seg) { - return dateRangeStart <= seg.dateRangeStart && seg.dateRangeEnd <= dateRangeEnd; - } - // date range is used in place of source offsets when offsets are missing public boolean sourceOffsetOverlaps(CubeSegment seg) { - if (isSourceOffsetsOn()) - return sourceOffsetStart < seg.sourceOffsetEnd && seg.sourceOffsetStart < sourceOffsetEnd; - else - return dateRangeOverlaps(seg); + return Segments.sourceOffsetOverlaps(this, seg); } // date range is used in place of source offsets when offsets are missing - @Override public boolean sourceOffsetContains(ISegment seg) { - if (isSourceOffsetsOn()) - return sourceOffsetStart <= ((CubeSegment) seg).sourceOffsetStart && ((CubeSegment) seg).sourceOffsetEnd <= sourceOffsetEnd; - else - return dateRangeContains(((CubeSegment) seg)); + return Segments.sourceOffsetContains(this, seg); } public void validate() { http://git-wip-us.apache.org/repos/asf/kylin/blob/0eebd7d8/core-metadata/src/main/java/org/apache/kylin/metadata/model/ISegment.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ISegment.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ISegment.java index e97f4f4..e3fcdcb 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/ISegment.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/ISegment.java @@ -36,5 +36,4 @@ public interface ISegment{ public long getLastBuildTime(); - public boolean sourceOffsetContains(ISegment seg); } http://git-wip-us.apache.org/repos/asf/kylin/blob/0eebd7d8/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java index 104c2af..f0a58cb 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/Segments.java @@ -21,6 +21,16 @@ package org.apache.kylin.metadata.model; import java.util.ArrayList; public class Segments<T extends ISegment> extends ArrayList<T> { + + private static final long serialVersionUID = 1L; + + public static boolean sourceOffsetContains(ISegment a, ISegment b) { + return a.getSourceOffsetStart() <= b.getSourceOffsetStart() && b.getSourceOffsetEnd() <= a.getSourceOffsetEnd(); + } + + public static boolean sourceOffsetOverlaps(ISegment a, ISegment b) { + return a.getSourceOffsetStart() < b.getSourceOffsetEnd() && b.getSourceOffsetStart() < a.getSourceOffsetEnd(); + } public T getFirstSegment() { if (this == null || this.size() == 0) { @@ -121,7 +131,7 @@ public class Segments<T extends ISegment> extends ArrayList<T> { if (seg == mergedSegment) continue; - if (mergedSegment.sourceOffsetContains(seg)) { + if (sourceOffsetContains(mergedSegment, seg)) { // make sure no holes if (result.size() > 0 && result.getLast().getSourceOffsetEnd() != seg.getSourceOffsetStart()) throw new IllegalStateException("Merging segments must not have holes between " + result.getLast() + " and " + seg);