Repository: incubator-kylin Updated Branches: refs/heads/2.x-staging 3ad572849 -> 7cd1b2df8
KYLIN-1138 Don't remove segments when enabling an inconsistent cube Project: http://git-wip-us.apache.org/repos/asf/incubator-kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-kylin/commit/7cd1b2df Tree: http://git-wip-us.apache.org/repos/asf/incubator-kylin/tree/7cd1b2df Diff: http://git-wip-us.apache.org/repos/asf/incubator-kylin/diff/7cd1b2df Branch: refs/heads/2.x-staging Commit: 7cd1b2df80d499a097bdf0128be84c6c16973070 Parents: 3ad5728 Author: Li, Yang <yang...@ebay.com> Authored: Thu Nov 12 15:17:09 2015 +0800 Committer: Li, Yang <yang...@ebay.com> Committed: Thu Nov 12 15:17:09 2015 +0800 ---------------------------------------------------------------------- .../src/main/java/org/apache/kylin/cube/model/CubeDesc.java | 7 +++++++ .../main/java/org/apache/kylin/rest/service/CubeService.java | 7 +++---- .../main/java/org/apache/kylin/rest/service/JobService.java | 6 ++++++ 3 files changed, 16 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/7cd1b2df/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java index b51e6cb..a4968e0 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeDesc.java @@ -403,6 +403,13 @@ public class CubeDesc extends RootPersistentEntity { return "CubeDesc [name=" + name + "]"; } + public boolean checkSignature() { + if (StringUtils.isBlank(getSignature())) { + return true; + } + return calculateSignature().equals(getSignature()); + } + public String calculateSignature() { MessageDigest md = null; try { http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/7cd1b2df/server/src/main/java/org/apache/kylin/rest/service/CubeService.java ---------------------------------------------------------------------- diff --git a/server/src/main/java/org/apache/kylin/rest/service/CubeService.java b/server/src/main/java/org/apache/kylin/rest/service/CubeService.java index e9d446f..6670de1 100644 --- a/server/src/main/java/org/apache/kylin/rest/service/CubeService.java +++ b/server/src/main/java/org/apache/kylin/rest/service/CubeService.java @@ -254,7 +254,7 @@ public class CubeService extends BasicService { } try { - if (!cube.getDescriptor().calculateSignature().equals(cube.getDescriptor().getSignature())) { + if (!cube.getDescriptor().checkSignature()) { logger.info("Releasing all segments due to cube desc conflict"); this.releaseAllSegments(cube); } @@ -391,9 +391,8 @@ public class CubeService extends BasicService { if (!cubingJobs.isEmpty()) { throw new JobException("Enable is not allowed with a running job."); } - if (!cube.getDescriptor().calculateSignature().equals(cube.getDescriptor().getSignature())) { - logger.info("Releasing all segments due to cube desc conflict"); - cube = this.releaseAllSegments(cube); + if (!cube.getDescriptor().checkSignature()) { + throw new IllegalStateException("Inconsistent cube desc signature for " + cube.getDescriptor()); } try { http://git-wip-us.apache.org/repos/asf/incubator-kylin/blob/7cd1b2df/server/src/main/java/org/apache/kylin/rest/service/JobService.java ---------------------------------------------------------------------- diff --git a/server/src/main/java/org/apache/kylin/rest/service/JobService.java b/server/src/main/java/org/apache/kylin/rest/service/JobService.java index 21d7d58..1386656 100644 --- a/server/src/main/java/org/apache/kylin/rest/service/JobService.java +++ b/server/src/main/java/org/apache/kylin/rest/service/JobService.java @@ -131,6 +131,7 @@ public class JobService extends BasicService { @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#cube, 'ADMINISTRATION') or hasPermission(#cube, 'OPERATION') or hasPermission(#cube, 'MANAGEMENT')") public JobInstance submitJob(CubeInstance cube, long startDate, long endDate, CubeBuildTypeEnum buildType, boolean forceMergeEmptySeg, String submitter) throws IOException, JobException { + checkCubeDescSignature(cube); checkNoRunningJob(cube); DefaultChainedExecutable job; @@ -169,6 +170,11 @@ public class JobService extends BasicService { return jobInstance; } + private void checkCubeDescSignature(CubeInstance cube) { + if (!cube.getDescriptor().checkSignature()) + throw new IllegalStateException("Inconsistent cube desc signature for " + cube.getDescriptor()); + } + private void checkNoRunningJob(CubeInstance cube) throws JobException { final List<CubingJob> cubingJobs = listAllCubingJobs(cube.getName(), null, EnumSet.allOf(ExecutableState.class)); for (CubingJob job : cubingJobs) {