You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ji...@apache.org on 2021/11/29 12:52:07 UTC
[dolphinscheduler] branch dev updated: to #7001: delete certain edge in processDefinition (#7038)
This is an automated email from the ASF dual-hosted git repository.
jinyleechina pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new b815da6 to #7001: delete certain edge in processDefinition (#7038)
b815da6 is described below
commit b815da6158175b65129e18c719a3e740dbd8da9f
Author: zwZjut <zw...@163.com>
AuthorDate: Mon Nov 29 20:51:58 2021 +0800
to #7001: delete certain edge in processDefinition (#7038)
* to #7001: delete certain edge in processDefinition
* to #7001: delete certain edge in processDefinition
* to #7001: delete certain edge in processDefinition
* to #7001: delete certain edge in processDefinition
* to #7001: fix checkstyle
* to #7001: delete edge by projectCode,processDefinitionCode,preTaskCode and postTaskCode
* to #7001: add UT
Co-authored-by: honghuo.zw <ho...@alibaba-inc.com>
---
.../controller/ProcessTaskRelationController.java | 32 ++++++++++++++
.../apache/dolphinscheduler/api/enums/Status.java | 1 +
.../api/service/ProcessTaskRelationService.java | 12 +++++
.../impl/ProcessTaskRelationServiceImpl.java | 51 ++++++++++++++++++++++
.../service/ProcessTaskRelationServiceTest.java | 30 +++++++++++++
.../dao/mapper/ProcessTaskRelationMapper.java | 14 ++++++
.../dao/mapper/ProcessTaskRelationMapper.xml | 18 ++++++++
7 files changed, 158 insertions(+)
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessTaskRelationController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessTaskRelationController.java
index 5c1e3f4..299e43d 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessTaskRelationController.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessTaskRelationController.java
@@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.api.controller;
import static org.apache.dolphinscheduler.api.enums.Status.CREATE_PROCESS_TASK_RELATION_ERROR;
import static org.apache.dolphinscheduler.api.enums.Status.DATA_IS_NOT_VALID;
+import static org.apache.dolphinscheduler.api.enums.Status.DELETE_EDGE_ERROR;
import static org.apache.dolphinscheduler.api.enums.Status.DELETE_TASK_PROCESS_RELATION_ERROR;
import static org.apache.dolphinscheduler.api.enums.Status.MOVE_PROCESS_TASK_RELATION_ERROR;
import static org.apache.dolphinscheduler.api.enums.Status.QUERY_TASK_PROCESS_RELATION_ERROR;
@@ -253,4 +254,35 @@ public class ProcessTaskRelationController extends BaseController {
@PathVariable("taskCode") long taskCode) {
return returnDataList(processTaskRelationService.queryDownstreamRelation(loginUser, projectCode, taskCode));
}
+
+ /**
+ * delete edge
+ *
+ * @param loginUser login user
+ * @param projectCode project code
+ * @param processDefinitionCode process definition code
+ * @param preTaskCode pre task code
+ * @param postTaskCode post task code
+ * @return delete result code
+ */
+ @ApiOperation(value = "deleteEdge", notes = "DELETE_EDGE_NOTES")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "projectCode", value = "PROJECT_CODE", required = true, type = "Long"),
+ @ApiImplicitParam(name = "processDefinitionCode", value = "PROCESS_DEFINITION_CODE", required = true, type = "Long"),
+ @ApiImplicitParam(name = "preTaskCode", value = "PRE_TASK_CODE", required = true, type = "Long"),
+ @ApiImplicitParam(name = "postTaskCode", value = "POST_TASK_CODE", required = true, type = "Long")
+ })
+ @DeleteMapping(value = "/{processDefinitionCode}/{preTaskCode}/{postTaskCode}")
+ @ResponseStatus(HttpStatus.OK)
+ @ApiException(DELETE_EDGE_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public Result deleteEdge(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+ @ApiParam(name = "projectCode", value = "PROJECT_CODE", required = true)
+ @PathVariable long projectCode,
+ @PathVariable long processDefinitionCode,
+ @PathVariable long preTaskCode,
+ @PathVariable long postTaskCode) {
+ return returnDataList(processTaskRelationService.deleteEdge(loginUser, projectCode, processDefinitionCode, preTaskCode, postTaskCode));
+ }
+
}
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 4fbec8e..dae4028 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
@@ -288,6 +288,7 @@ public enum Status {
TASK_HAS_DOWNSTREAM(50051, "Task [{0}] exists downstream dependence", "任务[{0}]存在下游依赖"),
MAIN_TABLE_USING_VERSION(50052, "the version that the master table is using", "主表正在使用该版本"),
PROJECT_PROCESS_NOT_MATCH(50053, "the project and the process is not match", "项目和工作流不匹配"),
+ DELETE_EDGE_ERROR(50054, "delete edge error", "删除工作流任务连接线错误"),
HDFS_NOT_STARTUP(60001, "hdfs not startup", "hdfs未启用"),
/**
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationService.java
index 37099d5..4246823 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationService.java
@@ -123,4 +123,16 @@ public interface ProcessTaskRelationService {
Map<String, Object> queryDownstreamRelation(User loginUser,
long projectCode,
long taskCode);
+
+ /**
+ * delete edge
+ *
+ * @param loginUser login user
+ * @param projectCode project code
+ * @param processDefinitionCode process definition code
+ * @param preTaskCode pre task code
+ * @param postTaskCode post task code
+ * @return delete result code
+ */
+ Map<String, Object> deleteEdge(User loginUser, long projectCode, long processDefinitionCode, long preTaskCode, long postTaskCode);
}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java
index d4e79bf..5f1d0a3 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java
@@ -389,6 +389,57 @@ public class ProcessTaskRelationServiceImpl extends BaseServiceImpl implements P
}
/**
+ * delete edge
+ *
+ * @param loginUser login user
+ * @param projectCode project code
+ * @param processDefinitionCode process definition code
+ * @param preTaskCode pre task code
+ * @param postTaskCode post task code
+ * @return delete result code
+ */
+ @Override
+ public Map<String, Object> deleteEdge(User loginUser, long projectCode, long processDefinitionCode, long preTaskCode, long postTaskCode) {
+ Project project = projectMapper.queryByCode(projectCode);
+ //check user access for project
+ Map<String, Object> result = projectService.checkProjectAndAuth(loginUser, project, projectCode);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
+ }
+ List<ProcessTaskRelation> processTaskRelationList = processTaskRelationMapper.queryByCode(projectCode, processDefinitionCode, preTaskCode, postTaskCode);
+ if (CollectionUtils.isEmpty(processTaskRelationList)) {
+ putMsg(result, Status.DATA_IS_NULL, "processTaskRelationList");
+ return result;
+ }
+ if (processTaskRelationList.size() > 1) {
+ putMsg(result, Status.DATA_IS_NOT_VALID, "processTaskRelationList");
+ return result;
+ }
+ ProcessTaskRelation processTaskRelation = processTaskRelationList.get(0);
+ int upstreamCount = processTaskRelationMapper.countByCode(projectCode, processTaskRelation.getProcessDefinitionCode(),
+ 0L, processTaskRelation.getPostTaskCode());
+
+ if (upstreamCount == 0) {
+ putMsg(result, Status.DATA_IS_NULL, "upstreamCount");
+ return result;
+ }
+ if (upstreamCount > 1) {
+ int delete = processTaskRelationMapper.deleteById(processTaskRelation.getId());
+ if (delete == 0) {
+ putMsg(result, Status.DELETE_EDGE_ERROR);
+ }
+ return result;
+ }
+ processTaskRelation.setPreTaskVersion(0);
+ processTaskRelation.setPreTaskCode(0L);
+ int update = processTaskRelationMapper.updateById(processTaskRelation);
+ if (update == 0) {
+ putMsg(result, Status.DELETE_EDGE_ERROR);
+ }
+ return result;
+ }
+
+ /**
* build task definition
*
* @return task definition
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java
index 2b7b5a7..3434fb3 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java
@@ -492,4 +492,34 @@ public class ProcessTaskRelationServiceTest {
result = processTaskRelationService.deleteTaskProcessRelation(loginUser, projectCode, processDefinitionCode, taskCode);
Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
}
+
+ @Test
+ public void testDeleteEdge() {
+ long projectCode = 1L;
+ long processDefinitionCode = 3L;
+ long preTaskCode = 4L;
+ long postTaskCode = 5L;
+ Project project = getProject(projectCode);
+ Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(project);
+
+ User loginUser = new User();
+ loginUser.setId(-1);
+ loginUser.setUserType(UserType.GENERAL_USER);
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS, projectCode);
+ Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectCode)).thenReturn(result);
+ ProcessTaskRelation processTaskRelation = new ProcessTaskRelation();
+ processTaskRelation.setProjectCode(projectCode);
+ processTaskRelation.setProcessDefinitionCode(processDefinitionCode);
+ processTaskRelation.setPreTaskCode(preTaskCode);
+ processTaskRelation.setPostTaskCode(postTaskCode);
+ List<ProcessTaskRelation> processTaskRelationList = new ArrayList<>();
+ processTaskRelationList.add(processTaskRelation);
+ Mockito.when(processTaskRelationMapper.queryByCode(projectCode, processDefinitionCode, preTaskCode, postTaskCode)).thenReturn(processTaskRelationList);
+ Mockito.when(processTaskRelationMapper.countByCode(projectCode, processDefinitionCode, 0L, postTaskCode)).thenReturn(1);
+ Mockito.when(processTaskRelationMapper.deleteById(processTaskRelation.getId())).thenReturn(1);
+ Mockito.when(processTaskRelationMapper.updateById(processTaskRelation)).thenReturn(1);
+ result = processTaskRelationService.deleteEdge(loginUser, projectCode, processDefinitionCode, preTaskCode, postTaskCode);
+ Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ }
}
diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java
index a03f8f0..c0aa1c7 100644
--- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java
+++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java
@@ -162,4 +162,18 @@ public interface ProcessTaskRelationMapper extends BaseMapper<ProcessTaskRelatio
* @return int
*/
int deleteRelation(@Param("processTaskRelationLog") ProcessTaskRelationLog processTaskRelationLog);
+
+ /**
+ * count by code
+ *
+ * @param projectCode projectCode
+ * @param processDefinitionCode processDefinitionCode
+ * @param preTaskCode preTaskCode
+ * @param postTaskCode postTaskCode
+ * @return ProcessTaskRelation
+ */
+ int countByCode(@Param("projectCode") long projectCode,
+ @Param("processDefinitionCode") long processDefinitionCode,
+ @Param("preTaskCode") long preTaskCode,
+ @Param("postTaskCode") long postTaskCode);
}
diff --git a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.xml b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.xml
index 95a6550..66633d3 100644
--- a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.xml
+++ b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.xml
@@ -177,4 +177,22 @@
and post_task_code = #{processTaskRelationLog.postTaskCode}
and post_task_version = #{processTaskRelationLog.post_task_version}
</delete>
+
+ <select id="countByCode" resultType="int">
+ select count(0)
+ from t_ds_process_task_relation
+ WHERE 1=1
+ <if test="projectCode != 0">
+ and project_code = #{projectCode}
+ </if>
+ <if test="processDefinitionCode != 0">
+ and process_definition_code = #{processDefinitionCode}
+ </if>
+ <if test="preTaskCode != 0">
+ and pre_task_code = #{preTaskCode}
+ </if>
+ <if test="postTaskCode != 0">
+ and post_task_code = #{postTaskCode}
+ </if>
+ </select>
</mapper>