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