Skip to content

Commit b815da6

Browse files
zwZjuthonghuo.zw
andauthored
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 <honghuo.zw@alibaba-inc.com>
1 parent 1e99732 commit b815da6

7 files changed

Lines changed: 158 additions & 0 deletions

File tree

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessTaskRelationController.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import static org.apache.dolphinscheduler.api.enums.Status.CREATE_PROCESS_TASK_RELATION_ERROR;
2121
import static org.apache.dolphinscheduler.api.enums.Status.DATA_IS_NOT_VALID;
22+
import static org.apache.dolphinscheduler.api.enums.Status.DELETE_EDGE_ERROR;
2223
import static org.apache.dolphinscheduler.api.enums.Status.DELETE_TASK_PROCESS_RELATION_ERROR;
2324
import static org.apache.dolphinscheduler.api.enums.Status.MOVE_PROCESS_TASK_RELATION_ERROR;
2425
import static org.apache.dolphinscheduler.api.enums.Status.QUERY_TASK_PROCESS_RELATION_ERROR;
@@ -253,4 +254,35 @@ public Result queryDownstreamRelation(@ApiIgnore @RequestAttribute(value = Const
253254
@PathVariable("taskCode") long taskCode) {
254255
return returnDataList(processTaskRelationService.queryDownstreamRelation(loginUser, projectCode, taskCode));
255256
}
257+
258+
/**
259+
* delete edge
260+
*
261+
* @param loginUser login user
262+
* @param projectCode project code
263+
* @param processDefinitionCode process definition code
264+
* @param preTaskCode pre task code
265+
* @param postTaskCode post task code
266+
* @return delete result code
267+
*/
268+
@ApiOperation(value = "deleteEdge", notes = "DELETE_EDGE_NOTES")
269+
@ApiImplicitParams({
270+
@ApiImplicitParam(name = "projectCode", value = "PROJECT_CODE", required = true, type = "Long"),
271+
@ApiImplicitParam(name = "processDefinitionCode", value = "PROCESS_DEFINITION_CODE", required = true, type = "Long"),
272+
@ApiImplicitParam(name = "preTaskCode", value = "PRE_TASK_CODE", required = true, type = "Long"),
273+
@ApiImplicitParam(name = "postTaskCode", value = "POST_TASK_CODE", required = true, type = "Long")
274+
})
275+
@DeleteMapping(value = "/{processDefinitionCode}/{preTaskCode}/{postTaskCode}")
276+
@ResponseStatus(HttpStatus.OK)
277+
@ApiException(DELETE_EDGE_ERROR)
278+
@AccessLogAnnotation(ignoreRequestArgs = "loginUser")
279+
public Result deleteEdge(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
280+
@ApiParam(name = "projectCode", value = "PROJECT_CODE", required = true)
281+
@PathVariable long projectCode,
282+
@PathVariable long processDefinitionCode,
283+
@PathVariable long preTaskCode,
284+
@PathVariable long postTaskCode) {
285+
return returnDataList(processTaskRelationService.deleteEdge(loginUser, projectCode, processDefinitionCode, preTaskCode, postTaskCode));
286+
}
287+
256288
}

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ public enum Status {
288288
TASK_HAS_DOWNSTREAM(50051, "Task [{0}] exists downstream dependence", "任务[{0}]存在下游依赖"),
289289
MAIN_TABLE_USING_VERSION(50052, "the version that the master table is using", "主表正在使用该版本"),
290290
PROJECT_PROCESS_NOT_MATCH(50053, "the project and the process is not match", "项目和工作流不匹配"),
291+
DELETE_EDGE_ERROR(50054, "delete edge error", "删除工作流任务连接线错误"),
291292
HDFS_NOT_STARTUP(60001, "hdfs not startup", "hdfs未启用"),
292293

293294
/**

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,16 @@ Map<String, Object> queryUpstreamRelation(User loginUser,
123123
Map<String, Object> queryDownstreamRelation(User loginUser,
124124
long projectCode,
125125
long taskCode);
126+
127+
/**
128+
* delete edge
129+
*
130+
* @param loginUser login user
131+
* @param projectCode project code
132+
* @param processDefinitionCode process definition code
133+
* @param preTaskCode pre task code
134+
* @param postTaskCode post task code
135+
* @return delete result code
136+
*/
137+
Map<String, Object> deleteEdge(User loginUser, long projectCode, long processDefinitionCode, long preTaskCode, long postTaskCode);
126138
}

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,57 @@ public Map<String, Object> queryDownstreamRelation(User loginUser, long projectC
388388
return result;
389389
}
390390

391+
/**
392+
* delete edge
393+
*
394+
* @param loginUser login user
395+
* @param projectCode project code
396+
* @param processDefinitionCode process definition code
397+
* @param preTaskCode pre task code
398+
* @param postTaskCode post task code
399+
* @return delete result code
400+
*/
401+
@Override
402+
public Map<String, Object> deleteEdge(User loginUser, long projectCode, long processDefinitionCode, long preTaskCode, long postTaskCode) {
403+
Project project = projectMapper.queryByCode(projectCode);
404+
//check user access for project
405+
Map<String, Object> result = projectService.checkProjectAndAuth(loginUser, project, projectCode);
406+
if (result.get(Constants.STATUS) != Status.SUCCESS) {
407+
return result;
408+
}
409+
List<ProcessTaskRelation> processTaskRelationList = processTaskRelationMapper.queryByCode(projectCode, processDefinitionCode, preTaskCode, postTaskCode);
410+
if (CollectionUtils.isEmpty(processTaskRelationList)) {
411+
putMsg(result, Status.DATA_IS_NULL, "processTaskRelationList");
412+
return result;
413+
}
414+
if (processTaskRelationList.size() > 1) {
415+
putMsg(result, Status.DATA_IS_NOT_VALID, "processTaskRelationList");
416+
return result;
417+
}
418+
ProcessTaskRelation processTaskRelation = processTaskRelationList.get(0);
419+
int upstreamCount = processTaskRelationMapper.countByCode(projectCode, processTaskRelation.getProcessDefinitionCode(),
420+
0L, processTaskRelation.getPostTaskCode());
421+
422+
if (upstreamCount == 0) {
423+
putMsg(result, Status.DATA_IS_NULL, "upstreamCount");
424+
return result;
425+
}
426+
if (upstreamCount > 1) {
427+
int delete = processTaskRelationMapper.deleteById(processTaskRelation.getId());
428+
if (delete == 0) {
429+
putMsg(result, Status.DELETE_EDGE_ERROR);
430+
}
431+
return result;
432+
}
433+
processTaskRelation.setPreTaskVersion(0);
434+
processTaskRelation.setPreTaskCode(0L);
435+
int update = processTaskRelationMapper.updateById(processTaskRelation);
436+
if (update == 0) {
437+
putMsg(result, Status.DELETE_EDGE_ERROR);
438+
}
439+
return result;
440+
}
441+
391442
/**
392443
* build task definition
393444
*

dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,4 +492,34 @@ public void testDeleteTaskProcessRelation() {
492492
result = processTaskRelationService.deleteTaskProcessRelation(loginUser, projectCode, processDefinitionCode, taskCode);
493493
Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
494494
}
495+
496+
@Test
497+
public void testDeleteEdge() {
498+
long projectCode = 1L;
499+
long processDefinitionCode = 3L;
500+
long preTaskCode = 4L;
501+
long postTaskCode = 5L;
502+
Project project = getProject(projectCode);
503+
Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(project);
504+
505+
User loginUser = new User();
506+
loginUser.setId(-1);
507+
loginUser.setUserType(UserType.GENERAL_USER);
508+
Map<String, Object> result = new HashMap<>();
509+
putMsg(result, Status.SUCCESS, projectCode);
510+
Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectCode)).thenReturn(result);
511+
ProcessTaskRelation processTaskRelation = new ProcessTaskRelation();
512+
processTaskRelation.setProjectCode(projectCode);
513+
processTaskRelation.setProcessDefinitionCode(processDefinitionCode);
514+
processTaskRelation.setPreTaskCode(preTaskCode);
515+
processTaskRelation.setPostTaskCode(postTaskCode);
516+
List<ProcessTaskRelation> processTaskRelationList = new ArrayList<>();
517+
processTaskRelationList.add(processTaskRelation);
518+
Mockito.when(processTaskRelationMapper.queryByCode(projectCode, processDefinitionCode, preTaskCode, postTaskCode)).thenReturn(processTaskRelationList);
519+
Mockito.when(processTaskRelationMapper.countByCode(projectCode, processDefinitionCode, 0L, postTaskCode)).thenReturn(1);
520+
Mockito.when(processTaskRelationMapper.deleteById(processTaskRelation.getId())).thenReturn(1);
521+
Mockito.when(processTaskRelationMapper.updateById(processTaskRelation)).thenReturn(1);
522+
result = processTaskRelationService.deleteEdge(loginUser, projectCode, processDefinitionCode, preTaskCode, postTaskCode);
523+
Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
524+
}
495525
}

dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,18 @@ List<ProcessTaskRelation> queryByCode(@Param("projectCode") long projectCode,
162162
* @return int
163163
*/
164164
int deleteRelation(@Param("processTaskRelationLog") ProcessTaskRelationLog processTaskRelationLog);
165+
166+
/**
167+
* count by code
168+
*
169+
* @param projectCode projectCode
170+
* @param processDefinitionCode processDefinitionCode
171+
* @param preTaskCode preTaskCode
172+
* @param postTaskCode postTaskCode
173+
* @return ProcessTaskRelation
174+
*/
175+
int countByCode(@Param("projectCode") long projectCode,
176+
@Param("processDefinitionCode") long processDefinitionCode,
177+
@Param("preTaskCode") long preTaskCode,
178+
@Param("postTaskCode") long postTaskCode);
165179
}

dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessTaskRelationMapper.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,4 +177,22 @@
177177
and post_task_code = #{processTaskRelationLog.postTaskCode}
178178
and post_task_version = #{processTaskRelationLog.post_task_version}
179179
</delete>
180+
181+
<select id="countByCode" resultType="int">
182+
select count(0)
183+
from t_ds_process_task_relation
184+
WHERE 1=1
185+
<if test="projectCode != 0">
186+
and project_code = #{projectCode}
187+
</if>
188+
<if test="processDefinitionCode != 0">
189+
and process_definition_code = #{processDefinitionCode}
190+
</if>
191+
<if test="preTaskCode != 0">
192+
and pre_task_code = #{preTaskCode}
193+
</if>
194+
<if test="postTaskCode != 0">
195+
and post_task_code = #{postTaskCode}
196+
</if>
197+
</select>
180198
</mapper>

0 commit comments

Comments
 (0)