Skip to content

Commit 2ae4402

Browse files
authored
[Fix-16934][api] When creating workflows containing switch nodes in different orders, the copied workflows may lose associations (#16939)
1 parent 37b620a commit 2ae4402

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

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

+23-22
Original file line numberDiff line numberDiff line change
@@ -2118,37 +2118,38 @@ protected void doBatchOperateWorkflowDefinition(User loginUser,
21182118
List<TaskDefinitionLog> taskDefinitionLogs =
21192119
taskDefinitionLogDao.queryTaskDefineLogList(workflowTaskRelations);
21202120
Map<Long, Long> taskCodeMap = new HashMap<>();
2121-
for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) {
2121+
taskDefinitionLogs.forEach(taskDefinitionLog -> {
21222122
try {
2123-
long taskCode = CodeGenerateUtils.genCode();
2124-
taskCodeMap.put(taskDefinitionLog.getCode(), taskCode);
2125-
taskDefinitionLog.setCode(taskCode);
2126-
if (TaskTypeUtils.isSwitchTask(taskDefinitionLog.getTaskType())) {
2127-
final String taskParams = taskDefinitionLog.getTaskParams();
2128-
final SwitchParameters switchParameters =
2129-
JSONUtils.parseObject(taskParams, SwitchParameters.class);
2130-
if (switchParameters == null) {
2131-
throw new IllegalArgumentException(
2132-
"Switch task params: " + taskParams + " is invalid.");
2133-
}
2134-
SwitchParameters.SwitchResult switchResult = switchParameters.getSwitchResult();
2135-
switchResult.getDependTaskList().forEach(switchResultVo -> {
2136-
switchResultVo.setNextNode(taskCodeMap.get(switchResultVo.getNextNode()));
2137-
});
2138-
if (switchResult.getNextNode() != null) {
2139-
switchResult.setNextNode(
2140-
taskCodeMap.get(switchResult.getNextNode()));
2141-
}
2142-
taskDefinitionLog.setTaskParams(JSONUtils.toJsonString(switchParameters));
2143-
}
2123+
taskCodeMap.put(taskDefinitionLog.getCode(), CodeGenerateUtils.genCode());
21442124
} catch (CodeGenerateException e) {
21452125
log.error("Generate task definition code error, projectCode:{}.", targetProjectCode, e);
21462126
putMsg(result, Status.INTERNAL_SERVER_ERROR_ARGS);
21472127
throw new ServiceException(Status.INTERNAL_SERVER_ERROR_ARGS);
21482128
}
2129+
});
2130+
for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) {
2131+
taskDefinitionLog.setCode(taskCodeMap.get(taskDefinitionLog.getCode()));
21492132
taskDefinitionLog.setProjectCode(targetProjectCode);
21502133
taskDefinitionLog.setVersion(0);
21512134
taskDefinitionLog.setName(taskDefinitionLog.getName());
2135+
if (TaskTypeUtils.isSwitchTask(taskDefinitionLog.getTaskType())) {
2136+
final String taskParams = taskDefinitionLog.getTaskParams();
2137+
final SwitchParameters switchParameters =
2138+
JSONUtils.parseObject(taskParams, SwitchParameters.class);
2139+
if (switchParameters == null) {
2140+
throw new IllegalArgumentException(
2141+
"Switch task params: " + taskParams + " is invalid.");
2142+
}
2143+
SwitchParameters.SwitchResult switchResult = switchParameters.getSwitchResult();
2144+
switchResult.getDependTaskList().forEach(switchResultVo -> {
2145+
switchResultVo.setNextNode(taskCodeMap.get(switchResultVo.getNextNode()));
2146+
});
2147+
if (switchResult.getNextNode() != null) {
2148+
switchResult.setNextNode(
2149+
taskCodeMap.get(switchResult.getNextNode()));
2150+
}
2151+
taskDefinitionLog.setTaskParams(JSONUtils.toJsonString(switchParameters));
2152+
}
21522153
}
21532154
for (WorkflowTaskRelationLog workflowTaskRelationLog : taskRelationList) {
21542155
if (workflowTaskRelationLog.getPreTaskCode() > 0) {

0 commit comments

Comments
 (0)