From 37b149da39a3ed493948f9872c002a49351cae49 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 20 Apr 2021 20:40:21 -0500 Subject: [PATCH] fix circular dependence bug (#5330) --- .../impl/ProcessDefinitionServiceImpl.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) 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 5f424e1ad0..75fe58a24e 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 @@ -1396,7 +1396,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro Project targetProject) throws JsonProcessingException { Map result = new HashMap<>(); - + String currentTimeStamp = DateUtils.getCurrentTimeStamp(); ProcessDefinition processDefinition = processDefinitionMapper.selectById(processId); if (processDefinition == null) { putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processId); @@ -1407,21 +1407,27 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro String locations = processDefinition.getLocations(); ObjectNode locationsJN = JSONUtils.parseObject(locations); - taskNodeList.forEach(taskNode -> { - String suffix = "_copy_" + DateUtils.getCurrentTimeStamp(); + for (TaskNode taskNode : taskNodeList) { + String suffix = "_copy_" + currentTimeStamp; String id = taskNode.getId(); String newName = locationsJN.path(id).path("name").asText() + suffix; ((ObjectNode) locationsJN.get(id)).put("name", newName); + List depList = taskNode.getDepList(); + List newDepList = depList.stream() + .map(s -> s + suffix) + .collect(Collectors.toList()); + + taskNode.setDepList(newDepList); taskNode.setName(taskNode.getName() + suffix); taskNode.setCode(0L); - }); + } processData.setTasks(taskNodeList); String processDefinitionJson = JSONUtils.toJsonString(processData); return createProcessDefinition( loginUser, targetProject.getName(), - processDefinition.getName() + "_copy_" + DateUtils.getCurrentTimeStamp(), + processDefinition.getName() + "_copy_" + currentTimeStamp, processDefinitionJson, processDefinition.getDescription(), locationsJN.toString(),