You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ch...@apache.org on 2022/11/07 03:25:52 UTC
[dolphinscheduler] branch 3.0.2-prepare updated: [Improvement-11678][API] Improvement the error message when batch delete workflow (#11682) (#12747)
This is an automated email from the ASF dual-hosted git repository.
chufenggao pushed a commit to branch 3.0.2-prepare
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/3.0.2-prepare by this push:
new e68395fa01 [Improvement-11678][API] Improvement the error message when batch delete workflow (#11682) (#12747)
e68395fa01 is described below
commit e68395fa01a1ecbb8cda8a440724b7e5afd2e3e1
Author: Eric Gao <er...@gmail.com>
AuthorDate: Mon Nov 7 11:25:47 2022 +0800
[Improvement-11678][API] Improvement the error message when batch delete workflow (#11682) (#12747)
* [Improvement] Improvement the error message when batch delete workflow
Co-authored-by: HomminLee <ho...@163.com>
---
.../controller/ProcessDefinitionController.java | 24 +------------
.../apache/dolphinscheduler/api/enums/Status.java | 12 +++++--
.../api/service/ProcessDefinitionService.java | 12 +++++++
.../service/impl/ProcessDefinitionServiceImpl.java | 39 ++++++++++++++++++++++
.../api/service/ProcessDefinitionServiceTest.java | 1 -
5 files changed, 61 insertions(+), 27 deletions(-)
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
index 2d9e4d834e..d8b353aaf5 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
@@ -638,29 +638,7 @@ public class ProcessDefinitionController extends BaseController {
public Result batchDeleteProcessDefinitionByCodes(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@ApiParam(name = "projectCode", value = "PROJECT_CODE", required = true) @PathVariable long projectCode,
@RequestParam("codes") String codes) {
- Map<String, Object> result = new HashMap<>();
- Set<String> deleteFailedCodeSet = new HashSet<>();
- if (!StringUtils.isEmpty(codes)) {
- String[] processDefinitionCodeArray = codes.split(",");
- for (String strProcessDefinitionCode : processDefinitionCodeArray) {
- long code = Long.parseLong(strProcessDefinitionCode);
- try {
- Map<String, Object> deleteResult = processDefinitionService.deleteProcessDefinitionByCode(loginUser, projectCode, code);
- if (!Status.SUCCESS.equals(deleteResult.get(Constants.STATUS))) {
- deleteFailedCodeSet.add((String) deleteResult.get(Constants.MSG));
- logger.error((String) deleteResult.get(Constants.MSG));
- }
- } catch (Exception e) {
- deleteFailedCodeSet.add(MessageFormat.format(Status.DELETE_PROCESS_DEFINE_BY_CODES_ERROR.getMsg(), strProcessDefinitionCode));
- }
- }
- }
-
- if (!deleteFailedCodeSet.isEmpty()) {
- putMsg(result, BATCH_DELETE_PROCESS_DEFINE_BY_CODES_ERROR, String.join("\n", deleteFailedCodeSet));
- } else {
- putMsg(result, Status.SUCCESS);
- }
+ Map<String, Object> result = processDefinitionService.batchDeleteProcessDefinitionByCodes(loginUser, projectCode, codes);
return returnDataList(result);
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
index c83e278340..2730c85120 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java
@@ -271,9 +271,12 @@ public enum Status {
SCHEDULE_CRON_STATE_ONLINE(50023, "the status of schedule {0} is already online", "调度配置[{0}]已上线"),
DELETE_SCHEDULE_CRON_BY_ID_ERROR(50024, "delete schedule by id error", "删除调度配置错误"),
BATCH_DELETE_PROCESS_DEFINE_ERROR(50025, "batch delete process definition error", "批量删除工作流定义错误"),
- BATCH_DELETE_PROCESS_DEFINE_BY_CODES_ERROR(50026, "batch delete process definition by codes {0} error", "批量删除工作流定义[{0}]错误"),
- DELETE_PROCESS_DEFINE_BY_CODES_ERROR(50026, "delete process definition by codes {0} error", "删除工作流定义[{0}]错误"),
- TENANT_NOT_SUITABLE(50027, "there is not any tenant suitable, please choose a tenant available.", "没有合适的租户,请选择可用的租户"),
+ BATCH_DELETE_PROCESS_DEFINE_BY_CODES_ERROR(50026, "batch delete process definition by codes error: {0}",
+ "批量删除工作流定义错误: {0}"),
+ DELETE_PROCESS_DEFINE_BY_CODES_ERROR(50026, "delete process definition by codes error: {0}",
+ "删除工作流定义错误: {0}"),
+ TENANT_NOT_SUITABLE(50027, "there is not any tenant suitable, please choose a tenant available.",
+ "没有合适的租户,请选择可用的租户"),
EXPORT_PROCESS_DEFINE_BY_ID_ERROR(50028, "export process definition by id error", "导出工作流定义错误"),
BATCH_EXPORT_PROCESS_DEFINE_BY_IDS_ERROR(50028, "batch export process definition by ids error", "批量导出工作流定义错误"),
IMPORT_PROCESS_DEFINE_ERROR(50029, "import process definition error", "导入工作流定义错误"),
@@ -304,6 +307,9 @@ public enum Status {
DELETE_EDGE_ERROR(50055, "delete edge error", "删除工作流任务连接线错误"),
NOT_SUPPORT_UPDATE_TASK_DEFINITION(50056, "task state does not support modification", "当前任务不支持修改"),
NOT_SUPPORT_COPY_TASK_TYPE(50057, "task type [{0}] does not support copy", "不支持复制的任务类型[{0}]"),
+ BATCH_EXECUTE_PROCESS_INSTANCE_ERROR(50058, "change process instance status error: {0}", "修改工作实例状态错误: {0}"),
+ START_TASK_INSTANCE_ERROR(50059, "start task instance error", "运行任务流实例错误"),
+ DELETE_PROCESS_DEFINE_ERROR(50060, "delete process definition [{0}] error: {1}", "删除工作流定义[{0}]错误: {1}"),
HDFS_NOT_STARTUP(60001, "hdfs not startup", "hdfs未启用"),
STORAGE_NOT_STARTUP(60002, "storage not startup", "存储未启用"),
S3_CANNOT_RENAME(60003, "directory cannot be renamed", "S3无法重命名文件夹"),
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
index dcd94f7a23..37134b4415 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
@@ -195,6 +195,18 @@ public interface ProcessDefinitionService {
String name,
long processDefinitionCode);
+ /**
+ * batch delete process definition by code
+ *
+ * @param loginUser login user
+ * @param projectCode project code
+ * @param codes process definition codes
+ * @return delete result code
+ */
+ Map<String, Object> batchDeleteProcessDefinitionByCodes(User loginUser,
+ long projectCode,
+ String codes);
+
/**
* delete process definition by code
*
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
index 06736d3be4..bb2cd537a0 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
@@ -720,6 +720,45 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro
return result;
}
+ @Override
+ @Transactional
+ public Map<String, Object> batchDeleteProcessDefinitionByCodes(User loginUser, long projectCode, String codes) {
+ Map<String, Object> result = new HashMap<>();
+ if (StringUtils.isEmpty(codes)) {
+ logger.error("Parameter processDefinitionCodes is empty, projectCode is {}.", projectCode);
+ putMsg(result, Status.PROCESS_DEFINITION_CODES_IS_EMPTY);
+ return result;
+ }
+
+ Set<Long> definitionCodes = Lists.newArrayList(codes.split(Constants.COMMA)).stream().map(Long::parseLong)
+ .collect(Collectors.toSet());
+ List<ProcessDefinition> processDefinitionList = processDefinitionMapper.queryByCodes(definitionCodes);
+ Set<Long> queryCodes =
+ processDefinitionList.stream().map(ProcessDefinition::getCode).collect(Collectors.toSet());
+ // definitionCodes - queryCodes
+ Set<Long> diffCode =
+ definitionCodes.stream().filter(code -> !queryCodes.contains(code)).collect(Collectors.toSet());
+
+ if (!diffCode.isEmpty()) {
+ logger.error("Process definition does not exist, processCodes:{}.",
+ diffCode.stream().map(String::valueOf).collect(Collectors.joining(Constants.COMMA)));
+ throw new ServiceException(Status.BATCH_DELETE_PROCESS_DEFINE_BY_CODES_ERROR,
+ diffCode.stream().map(code -> code + "[process definition not exist]")
+ .collect(Collectors.joining(Constants.COMMA))
+ );
+ }
+
+ for (ProcessDefinition process : processDefinitionList) {
+ try {
+ this.deleteProcessDefinitionByCode(loginUser, process.getCode());
+ } catch (Exception e) {
+ throw new ServiceException(Status.DELETE_PROCESS_DEFINE_ERROR, process.getName(), e.getMessage());
+ }
+ }
+ putMsg(result, Status.SUCCESS);
+ return result;
+ }
+
/**
* Process definition want to delete whether used in other task, should throw exception when have be used.
*
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
index 44d65f731c..397a2153e1 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
@@ -444,7 +444,6 @@ public class ProcessDefinitionServiceTest {
}
@Test
- @Ignore
public void testReleaseProcessDefinition() {
long projectCode = 1L;
Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(getProject(projectCode));