This is an automated email from the ASF dual-hosted git repository.

zihaoxiang 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 2ae4402fde [Fix-16934][api] When creating workflows containing switch 
nodes in different orders, the copied workflows may lose associations (#16939)
2ae4402fde is described below

commit 2ae4402fde1a16cc05057f0cda64502e4d7a9e44
Author: LiWenXin <[email protected]>
AuthorDate: Fri Jan 17 14:44:07 2025 +0800

    [Fix-16934][api] When creating workflows containing switch nodes in 
different orders, the copied workflows may lose associations (#16939)
---
 .../impl/WorkflowDefinitionServiceImpl.java        | 45 +++++++++++-----------
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java
index f9432da84f..1b743e2c0c 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java
@@ -2118,37 +2118,38 @@ public class WorkflowDefinitionServiceImpl extends 
BaseServiceImpl implements Wo
                 List<TaskDefinitionLog> taskDefinitionLogs =
                         
taskDefinitionLogDao.queryTaskDefineLogList(workflowTaskRelations);
                 Map<Long, Long> taskCodeMap = new HashMap<>();
-                for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) 
{
+                taskDefinitionLogs.forEach(taskDefinitionLog -> {
                     try {
-                        long taskCode = CodeGenerateUtils.genCode();
-                        taskCodeMap.put(taskDefinitionLog.getCode(), taskCode);
-                        taskDefinitionLog.setCode(taskCode);
-                        if 
(TaskTypeUtils.isSwitchTask(taskDefinitionLog.getTaskType())) {
-                            final String taskParams = 
taskDefinitionLog.getTaskParams();
-                            final SwitchParameters switchParameters =
-                                    JSONUtils.parseObject(taskParams, 
SwitchParameters.class);
-                            if (switchParameters == null) {
-                                throw new IllegalArgumentException(
-                                        "Switch task params: " + taskParams + 
" is invalid.");
-                            }
-                            SwitchParameters.SwitchResult switchResult = 
switchParameters.getSwitchResult();
-                            
switchResult.getDependTaskList().forEach(switchResultVo -> {
-                                
switchResultVo.setNextNode(taskCodeMap.get(switchResultVo.getNextNode()));
-                            });
-                            if (switchResult.getNextNode() != null) {
-                                switchResult.setNextNode(
-                                        
taskCodeMap.get(switchResult.getNextNode()));
-                            }
-                            
taskDefinitionLog.setTaskParams(JSONUtils.toJsonString(switchParameters));
-                        }
+                        taskCodeMap.put(taskDefinitionLog.getCode(), 
CodeGenerateUtils.genCode());
                     } catch (CodeGenerateException e) {
                         log.error("Generate task definition code error, 
projectCode:{}.", targetProjectCode, e);
                         putMsg(result, Status.INTERNAL_SERVER_ERROR_ARGS);
                         throw new 
ServiceException(Status.INTERNAL_SERVER_ERROR_ARGS);
                     }
+                });
+                for (TaskDefinitionLog taskDefinitionLog : taskDefinitionLogs) 
{
+                    
taskDefinitionLog.setCode(taskCodeMap.get(taskDefinitionLog.getCode()));
                     taskDefinitionLog.setProjectCode(targetProjectCode);
                     taskDefinitionLog.setVersion(0);
                     taskDefinitionLog.setName(taskDefinitionLog.getName());
+                    if 
(TaskTypeUtils.isSwitchTask(taskDefinitionLog.getTaskType())) {
+                        final String taskParams = 
taskDefinitionLog.getTaskParams();
+                        final SwitchParameters switchParameters =
+                                JSONUtils.parseObject(taskParams, 
SwitchParameters.class);
+                        if (switchParameters == null) {
+                            throw new IllegalArgumentException(
+                                    "Switch task params: " + taskParams + " is 
invalid.");
+                        }
+                        SwitchParameters.SwitchResult switchResult = 
switchParameters.getSwitchResult();
+                        
switchResult.getDependTaskList().forEach(switchResultVo -> {
+                            
switchResultVo.setNextNode(taskCodeMap.get(switchResultVo.getNextNode()));
+                        });
+                        if (switchResult.getNextNode() != null) {
+                            switchResult.setNextNode(
+                                    
taskCodeMap.get(switchResult.getNextNode()));
+                        }
+                        
taskDefinitionLog.setTaskParams(JSONUtils.toJsonString(switchParameters));
+                    }
                 }
                 for (WorkflowTaskRelationLog workflowTaskRelationLog : 
taskRelationList) {
                     if (workflowTaskRelationLog.getPreTaskCode() > 0) {

Reply via email to