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