You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by nj...@apache.org on 2017/12/02 17:23:55 UTC

[02/19] kylin git commit: APACHE-KYLIN-2733: Don't allow building if still optimizing & don't allow optimizing if has building segments

APACHE-KYLIN-2733: Don't allow building if still optimizing & don't allow optimizing if has building segments


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/42f8e073
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/42f8e073
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/42f8e073

Branch: refs/heads/master
Commit: 42f8e073d7f381af7e50660099cfdd6200066363
Parents: 0f13305
Author: Zhong <nj...@apache.org>
Authored: Wed Nov 8 15:13:58 2017 +0800
Committer: Zhong <nj...@apache.org>
Committed: Sat Dec 2 23:21:43 2017 +0800

----------------------------------------------------------------------
 .../apache/kylin/rest/service/JobService.java   | 30 ++++++++++++++++++++
 1 file changed, 30 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/42f8e073/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java b/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java
index 9f2d0d9..89e996d 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java
@@ -61,6 +61,7 @@ import org.apache.kylin.job.lock.JobLock;
 import org.apache.kylin.metadata.model.SegmentRange;
 import org.apache.kylin.metadata.model.SegmentRange.TSRange;
 import org.apache.kylin.metadata.model.SegmentStatusEnum;
+import org.apache.kylin.metadata.model.Segments;
 import org.apache.kylin.metadata.realization.RealizationStatusEnum;
 import org.apache.kylin.rest.exception.BadRequestException;
 import org.apache.kylin.rest.msg.Message;
@@ -232,6 +233,12 @@ public class JobService extends BasicService implements InitializingBean {
         }
 
         checkCubeDescSignature(cube);
+        checkAllowBuilding(cube);
+
+        if (buildType == CubeBuildTypeEnum.BUILD || buildType == CubeBuildTypeEnum.REFRESH) {
+            checkAllowParallelBuilding(cube);
+        }
+
         DefaultChainedExecutable job;
 
         CubeSegment newSeg = null;
@@ -416,7 +423,30 @@ public class JobService extends BasicService implements InitializingBean {
                     String.format(msg.getINCONSISTENT_CUBE_DESC_SIGNATURE(), cube.getDescriptor()));
     }
 
+    private void checkAllowBuilding(CubeInstance cube) {
+        Segments<CubeSegment> readyPendingSegments = cube.getSegments(SegmentStatusEnum.READY_PENDING);
+        if (readyPendingSegments.size() > 0) {
+            throw new BadRequestException("The cube " + cube.getName() + " has READY_PENDING segments "
+                    + readyPendingSegments + ". It's not allowed for building");
+        }
+    }
+
+    private void checkAllowParallelBuilding(CubeInstance cube) {
+        if (cube.getCuboids() == null) {
+            Segments<CubeSegment> cubeSegments = cube.getSegments();
+            if (cubeSegments.size() > 0 && cubeSegments.getSegments(SegmentStatusEnum.READY).size() <= 0) {
+                throw new BadRequestException("The cube " + cube.getName() + " has segments " + cubeSegments
+                        + ", but none of them is READY. It's not allowed for parallel building");
+            }
+        }
+    }
+
     private void checkAllowOptimization(CubeInstance cube, Set<Long> cuboidsRecommend) {
+        Segments<CubeSegment> buildingSegments = cube.getBuildingSegments();
+        if (buildingSegments.size() > 0) {
+            throw new BadRequestException("The cube " + cube.getName() + " has building segments " + buildingSegments
+                    + ". It's not allowed for optimization");
+        }
         long baseCuboid = cube.getCuboidScheduler().getBaseCuboidId();
         if (!cuboidsRecommend.contains(baseCuboid)) {
             throw new BadRequestException("The recommend cuboids should contain the base cuboid " + baseCuboid);