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 <[email protected]>
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();