This is an automated email from the ASF dual-hosted git repository. xxyu pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 715aa6e [KYLIN-4938] remove segment by UUID 715aa6e is described below commit 715aa6ecf1b523df2890f864b6148d4a6df48b08 Author: yangjiang <yangji...@ebay.com> AuthorDate: Mon Nov 16 19:22:20 2020 +0800 [KYLIN-4938] remove segment by UUID --- .../kylin/rest/controller/CubeController.java | 26 ++++++++++++++++++++++ .../java/org/apache/kylin/rest/msg/Message.java | 4 ++++ .../org/apache/kylin/rest/service/CubeService.java | 25 +++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java index 70fc3e6..5cb64a1 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java @@ -372,6 +372,32 @@ public class CubeController extends BasicController { } /** + * Delete a cube segment by UUID + * + * @throws IOException + */ + @RequestMapping(value = "/{cubeName}/segs2/{segmentID}", method = { RequestMethod.DELETE }, produces = { + "application/json" }) + @ResponseBody + public CubeInstance deleteSegmentByUUID(@PathVariable String cubeName, @PathVariable String segmentID) { + checkCubeExists(cubeName); + CubeInstance cube = cubeService.getCubeManager().getCube(cubeName); + + CubeSegment segment = cube.getSegmentById(segmentID); + if (segment == null) { + throw new NotFoundException("Cannot find segment by UUID '" + segmentID + "'"); + } + + try { + return cubeService.deleteSegmentById(cube, segmentID); + } catch (Exception e) { + logger.error(e.getLocalizedMessage(), e); + throw new InternalErrorException(e.getLocalizedMessage(), e); + } + } + + + /** * Build/Rebuild a cube segment */ @RequestMapping(value = "/{cubeName}/build", method = { RequestMethod.PUT }, produces = { "application/json" }) diff --git a/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java b/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java index dbd637c..f6c25d7 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java +++ b/server-base/src/main/java/org/apache/kylin/rest/msg/Message.java @@ -65,6 +65,10 @@ public class Message { return "Cannot delete segment '%s' as its status is not READY. Discard the on-going job for it."; } + public String getDELETE_READY_SEG_BY_UUID() { + return "Cannot delete segment by UUID '%s' as its status is READY or its Cube is READY."; + } + public String getDELETE_SEG_FROM_READY_CUBE() { return "Cannot delete segment '%s' from ready cube '%s'. Please disable the cube first."; } diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java index 5caf16b..1dc0fc7 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/CubeService.java @@ -610,6 +610,31 @@ public class CubeService extends BasicService implements InitializingBean { return cube; } + public CubeInstance deleteSegmentById(CubeInstance cube, String uuid) throws IOException { + aclEvaluate.checkProjectWritePermission(cube); + Message msg = MsgPicker.getMsg(); + + CubeSegment toDelete = null; + + toDelete = cube.getSegmentById(uuid); + + if (toDelete == null) { + throw new BadRequestException(String.format(Locale.ROOT, msg.getSEG_NOT_FOUND(), uuid)); + } + + if (cube.getStatus() == RealizationStatusEnum.DISABLED || isOrphonSegment(cube, uuid)) { + + CubeInstance cubeInstance = CubeManager.getInstance(getConfig()).updateCubeDropSegments(cube, toDelete); + + cleanSegmentStorage(Collections.singletonList(toDelete)); + + return cubeInstance; + } else { + throw new BadRequestException( + String.format(Locale.ROOT, msg.getDELETE_READY_SEG_BY_UUID(), uuid, cube.getName())); + } + } + public CubeInstance deleteSegment(CubeInstance cube, String segmentName) throws IOException { aclEvaluate.checkProjectOperationPermission(cube); Message msg = MsgPicker.getMsg();