You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by xx...@apache.org on 2021/03/30 09:17:58 UTC

[kylin] branch master updated: [KYLIN-4938] remove segment by UUID

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 <ya...@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();