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

Reply via email to