You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2015/11/12 08:17:17 UTC

incubator-kylin git commit: KYLIN-1138 Don't remove segments when enabling an inconsistent cube

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 <ya...@ebay.com>
Authored: Thu Nov 12 15:17:09 2015 +0800
Committer: Li, Yang <ya...@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) {