Repository: kylin Updated Branches: refs/heads/KYILN-2317 5b13287d8 -> 477bf75e8
add segment check Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/477bf75e Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/477bf75e Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/477bf75e Branch: refs/heads/KYILN-2317 Commit: 477bf75e87685f953ed24d8485fe739839e169b1 Parents: 5b13287 Author: Billy Liu <billy...@apache.org> Authored: Thu Dec 29 16:10:42 2016 +0800 Committer: Billy Liu <billy...@apache.org> Committed: Thu Dec 29 16:10:42 2016 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/tool/HybridCubeCLI.java | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/477bf75e/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java ---------------------------------------------------------------------- diff --git a/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java b/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java index 461daf9..b525c45 100644 --- a/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java +++ b/tool/src/main/java/org/apache/kylin/tool/HybridCubeCLI.java @@ -32,6 +32,7 @@ import org.apache.kylin.common.util.AbstractApplication; import org.apache.kylin.common.util.OptionsHelper; import org.apache.kylin.cube.CubeInstance; import org.apache.kylin.cube.CubeManager; +import org.apache.kylin.cube.CubeSegment; import org.apache.kylin.metadata.MetadataManager; import org.apache.kylin.metadata.model.DataModelDesc; import org.apache.kylin.metadata.project.ProjectManager; @@ -144,6 +145,7 @@ public class HybridCubeCLI extends AbstractApplication { } private HybridInstance create(String hybridName, List<RealizationEntry> realizationEntries, String projectName, String owner) throws IOException { + checkSegmentOffset(realizationEntries); HybridInstance hybridInstance = HybridInstance.create(kylinConfig, hybridName, realizationEntries); store.putResource(hybridInstance.getResourcePath(), hybridInstance, HybridManager.HYBRID_SERIALIZER); ProjectManager.getInstance(kylinConfig).moveRealizationToProject(RealizationType.HYBRID, hybridInstance.getName(), projectName, owner); @@ -153,6 +155,7 @@ public class HybridCubeCLI extends AbstractApplication { } private void update(HybridInstance hybridInstance, List<RealizationEntry> realizationEntries, String projectName, String owner) throws IOException { + checkSegmentOffset(realizationEntries); hybridInstance.setRealizationEntries(realizationEntries); store.putResource(hybridInstance.getResourcePath(), hybridInstance, HybridManager.HYBRID_SERIALIZER); ProjectManager.getInstance(kylinConfig).moveRealizationToProject(RealizationType.HYBRID, hybridInstance.getName(), projectName, owner); @@ -166,4 +169,28 @@ public class HybridCubeCLI extends AbstractApplication { hybridManager.reloadAllHybridInstance(); logger.info("HybridInstance was deleted at: " + hybridInstance.getResourcePath()); } + + private void checkSegmentOffset(List<RealizationEntry> realizationEntries) { + if (realizationEntries == null || realizationEntries.size() == 0) + throw new RuntimeException("No realization found"); + long lastOffset = -1; + for (RealizationEntry entry : realizationEntries) { + if (entry.getType() != RealizationType.CUBE) { + throw new RuntimeException("Wrong realization type: " + entry.getType() + ", only cube supported. "); + } + + CubeInstance cubeInstance = cubeManager.getCube(entry.getRealization()); + CubeSegment segment = cubeInstance.getLastSegment(); + if (segment == null) + continue; + if (lastOffset == -1) { + lastOffset = segment.getSourceOffsetEnd(); + } else { + if (lastOffset > segment.getSourceOffsetStart()) { + throw new RuntimeException("Segments has overlap, could not hybrid. Last Segment End: " + lastOffset + ", Next Segment Start: " + segment.getSourceOffsetStart()); + } + lastOffset = segment.getSourceOffsetEnd(); + } + } + } }