KYLIN-1250 fix NPE when discarding a job

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

Branch: refs/heads/1.x-HBase1.1.3
Commit: 87ac53b5cd85e05ef0e58e8ebe60f75839acf686
Parents: 20104d3
Author: shaofengshi <shaofeng...@apache.org>
Authored: Thu Dec 24 10:58:04 2015 +0800
Committer: shaofengshi <shaofeng...@apache.org>
Committed: Thu Dec 24 11:15:23 2015 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/kylin/cube/CubeDescManager.java  | 10 +---------
 .../org/apache/kylin/rest/controller/CubeController.java  |  8 ++++++++
 .../java/org/apache/kylin/rest/service/JobService.java    |  2 +-
 3 files changed, 10 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/87ac53b5/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java
----------------------------------------------------------------------
diff --git a/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java 
b/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java
index dfb1b88..89f8b01 100644
--- a/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java
+++ b/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java
@@ -252,15 +252,7 @@ public class CubeDescManager {
         }
 
         desc.setSignature(desc.calculateSignature());
-
-        // drop cube segments if signature changes
-        CubeInstance cube = getCubeManager().getCube(desc.getName());
-        if (cube != null && !StringUtils.equals(desc.getSignature(), 
cube.getDescriptor().getSignature())) {
-            logger.info("Detect signature change of [" + desc.getName() + "], 
drop all existing segments");
-            cube.getSegments().clear();
-            getCubeManager().updateCube(cube);
-        }
-
+        
         // Save Source
         String path = desc.getResourcePath();
         getStore().putResource(path, desc, CUBE_DESC_SERIALIZER);

http://git-wip-us.apache.org/repos/asf/kylin/blob/87ac53b5/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java
----------------------------------------------------------------------
diff --git 
a/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java 
b/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java
index 679e4e6..85cbae7 100644
--- a/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java
+++ b/server/src/main/java/org/apache/kylin/rest/controller/CubeController.java
@@ -459,9 +459,17 @@ public class CubeController extends BasicController {
             }
 
             CubeInstance cube = cubeService.getCubeManager().getCube(cubeName);
+            String previousCubeDescSignature = 
cube.getDescriptor().getSignature();
             String projectName = (null == cubeRequest.getProject()) ? 
ProjectInstance.DEFAULT_PROJECT_NAME : cubeRequest.getProject();
             desc = cubeService.updateCubeAndDesc(cube, desc, projectName);
 
+            // drop cube segments if signature changes
+            if (!StringUtils.equals(desc.getSignature(), 
previousCubeDescSignature)) {
+                logger.info("Detect signature change of [" + desc.getName() + 
"], drop all existing segments");
+                cube = cubeService.getCubeManager().getCube(cubeName);
+                cubeService.purgeCube(cube);
+            }
+
             ProjectManager projectManager = cubeService.getProjectManager();
             if (!cubeService.isCubeInProject(projectName, cube)) {
                 String owner = 
SecurityContextHolder.getContext().getAuthentication().getName();

http://git-wip-us.apache.org/repos/asf/kylin/blob/87ac53b5/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 0903f83..1be9bd5 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
@@ -312,7 +312,7 @@ public class JobService extends BasicService {
         CubeInstance cubeInstance = 
getCubeManager().getCube(job.getRelatedCube());
         for (String segmentId : segmentIds) {
             final CubeSegment segment = cubeInstance.getSegmentById(segmentId);
-            if (segment.getStatus() == SegmentStatusEnum.NEW) {
+            if (segment != null && segment.getStatus() == 
SegmentStatusEnum.NEW) {
                 cubeInstance.getSegments().remove(segment);
                 getCubeManager().updateCube(cubeInstance);
             }

Reply via email to