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

wenhemin pushed a commit to branch json_split
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/json_split by this push:
     new dd36da8  [Feature][JsonSplit] fix process bug (#5193)
dd36da8 is described below

commit dd36da8d1f2c9d37172be493f83221819a26c51f
Author: JinyLeeChina <[email protected]>
AuthorDate: Thu Apr 1 17:45:44 2021 +0800

    [Feature][JsonSplit] fix process bug (#5193)
    
    * transform taskCode from long to string
    
    * fix process bug
    
    * code review
    
    * code review
    
    * code review
    
    Co-authored-by: JinyLeeChina <[email protected]>
---
 .../apache/dolphinscheduler/common/Constants.java  |  5 ++
 .../dolphinscheduler/common/utils/StringUtils.java | 12 +++++
 .../server/master/runner/MasterExecThread.java     |  1 +
 .../service/process/ProcessService.java            | 63 ++++++++++++++--------
 4 files changed, 58 insertions(+), 23 deletions(-)

diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
index 736eb83..db3cd14 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java
@@ -655,6 +655,11 @@ public final class Constants {
     public static final int EXIT_CODE_FAILURE = -1;
 
     /**
+     * process or task definition failure
+     */
+    public static final int DEFINITION_FAILURE = -1;
+
+    /**
      * date format of yyyyMMdd
      */
     public static final String PARAMETER_FORMAT_DATE = "yyyyMMdd";
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StringUtils.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StringUtils.java
index 3ec1a2e..dae799c 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StringUtils.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/StringUtils.java
@@ -119,4 +119,16 @@ public class StringUtils {
         }
         return str.substring(pos + separator.length());
     }
+
+    public static long strDigitToLong(String str, long defaultValue) {
+        if (str == null) {
+            return defaultValue;
+        } else {
+            try {
+                return Long.parseLong(str);
+            } catch (NumberFormatException var4) {
+                return defaultValue;
+            }
+        }
+    }
 }
diff --git 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
index 104aa87..41eb150 100644
--- 
a/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
+++ 
b/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterExecThread.java
@@ -65,6 +65,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
diff --git 
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
 
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
index fd357c4..bccd926 100644
--- 
a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
+++ 
b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
@@ -2181,7 +2181,7 @@ public class ProcessService {
      */
     public int processDefinitionToDB(ProcessDefinition processDefinition, 
ProcessDefinitionLog processDefinitionLog) {
         if (null == processDefinition || null == processDefinitionLog) {
-            return Constants.EXIT_CODE_FAILURE;
+            return Constants.DEFINITION_FAILURE;
         }
 
         processDefinitionLog.setId(processDefinition.getId());
@@ -2202,7 +2202,7 @@ public class ProcessService {
      */
     public int switchVersion(ProcessDefinition processDefinition, 
ProcessDefinitionLog processDefinitionLog) {
         int switchResult = processDefinitionToDB(processDefinition, 
processDefinitionLog);
-        if (switchResult != Constants.EXIT_CODE_FAILURE) {
+        if (switchResult != Constants.DEFINITION_FAILURE) {
             switchProcessTaskRelationVersion(processDefinition);
         }
         return switchResult;
@@ -2227,7 +2227,7 @@ public class ProcessService {
         Date now = new Date();
         taskDefinition.setProjectCode(projectCode);
         taskDefinition.setUserId(operator.getId());
-        taskDefinition.setVersion(version == null || version == 0 ? 1 : 
version);
+        taskDefinition.setVersion(version == null || version == 0 ? 1 : 
version + 1);
         taskDefinition.setUpdateTime(now);
         setTaskFromTaskNode(taskNode, taskDefinition);
         int update = taskDefinitionMapper.updateById(taskDefinition);
@@ -2284,14 +2284,17 @@ public class ProcessService {
      */
     public int saveProcessDefinition(User operator, Project project, String 
name, String desc, String locations,
                                      String connects, ProcessData processData, 
ProcessDefinition processDefinition) {
-        createTaskAndRelation(operator, project.getCode(), processDefinition, 
processData);
         ProcessDefinitionLog processDefinitionLog = 
insertProcessDefinitionLog(operator, processDefinition.getCode(),
                 name, processData, project, desc, locations, connects);
+        Map<String, TaskDefinition> taskDefinitionMap = 
handleTaskDefinition(operator, project.getCode(), processData.getTasks());
+        if (Constants.DEFINITION_FAILURE == handleTaskRelation(operator, 
project.getCode(), processDefinitionLog, processData.getTasks(), 
taskDefinitionMap)) {
+            return Constants.DEFINITION_FAILURE;
+        }
         return processDefinitionToDB(processDefinition, processDefinitionLog);
     }
 
     /**
-     *
+     * save processDefinition
      */
     public ProcessDefinitionLog insertProcessDefinitionLog(User operator, Long 
processDefinitionCode, String processDefinitionName,
                                                            ProcessData 
processData, Project project,
@@ -2300,7 +2303,7 @@ public class ProcessService {
         Integer version = 
processDefineLogMapper.queryMaxVersionForDefinition(processDefinitionCode);
         processDefinitionLog.setUserId(operator.getId());
         processDefinitionLog.setCode(processDefinitionCode);
-        processDefinitionLog.setVersion(version == null || version == 0 ? 1 : 
version);
+        processDefinitionLog.setVersion(version == null || version == 0 ? 1 : 
version + 1);
         processDefinitionLog.setName(processDefinitionName);
         processDefinitionLog.setReleaseState(ReleaseState.OFFLINE);
         processDefinitionLog.setProjectCode(project.getCode());
@@ -2331,16 +2334,15 @@ public class ProcessService {
     }
 
     /**
-     * create task definition and task relations
+     * handle task definition
      */
-    public void createTaskAndRelation(User operator,
-                                      Long projectCode,
-                                      ProcessDefinition processDefinition,
-                                      ProcessData processData) {
-        List<TaskNode> taskNodeList = (processData.getTasks() == null) ? new 
ArrayList<>() : processData.getTasks();
-        Map<String, TaskDefinition> taskNameAndCode = new HashMap<>();
-        for (TaskNode taskNode : taskNodeList) {
-            TaskDefinition taskDefinition = 
taskDefinitionMapper.queryByDefinitionCode(Long.parseLong(taskNode.getCode()));
+    public Map<String, TaskDefinition> handleTaskDefinition(User operator, 
Long projectCode, List<TaskNode> taskNodes) {
+        if (taskNodes == null) {
+            return null;
+        }
+        Map<String, TaskDefinition> taskDefinitionMap = new HashMap<>();
+        for (TaskNode taskNode : taskNodes) {
+            TaskDefinition taskDefinition = 
taskDefinitionMapper.queryByDefinitionCode(StringUtils.strDigitToLong(taskNode.getCode(),
 -1L));
             if (taskDefinition == null) {
                 try {
                     long code = SnowFlakeUtils.getInstance().nextId();
@@ -2356,7 +2358,21 @@ public class ProcessService {
                 }
                 updateTaskDefinition(operator, projectCode, taskNode, 
taskDefinition);
             }
-            taskNameAndCode.put(taskNode.getName(), taskDefinition);
+            taskDefinitionMap.put(taskNode.getName(), taskDefinition);
+        }
+        return taskDefinitionMap;
+    }
+
+    /**
+     * handle task relations
+     */
+    public int handleTaskRelation(User operator,
+                                  Long projectCode,
+                                  ProcessDefinition processDefinition,
+                                  List<TaskNode> taskNodes,
+                                  Map<String, TaskDefinition> 
taskDefinitionMap) {
+        if (null == processDefinition || null == taskNodes || null == 
taskDefinitionMap) {
+            return Constants.DEFINITION_FAILURE;
         }
         List<ProcessTaskRelation> processTaskRelationList = 
processTaskRelationMapper.queryByProcessCode(projectCode, 
processDefinition.getCode());
         if (!processTaskRelationList.isEmpty()) {
@@ -2364,7 +2380,7 @@ public class ProcessService {
         }
         List<ProcessTaskRelation> builderRelationList = new ArrayList<>();
         Date now = new Date();
-        for (TaskNode taskNode : taskNodeList) {
+        for (TaskNode taskNode : taskNodes) {
             List<String> depList = taskNode.getDepList();
             if (CollectionUtils.isNotEmpty(depList)) {
                 for (String preTaskName : depList) {
@@ -2372,10 +2388,10 @@ public class ProcessService {
                             processDefinition.getVersion(),
                             projectCode,
                             processDefinition.getCode(),
-                            taskNameAndCode.get(preTaskName).getCode(),
-                            taskNameAndCode.get(preTaskName).getVersion(),
-                            taskNameAndCode.get(taskNode.getName()).getCode(),
-                            
taskNameAndCode.get(taskNode.getName()).getVersion(),
+                            taskDefinitionMap.get(preTaskName).getCode(),
+                            taskDefinitionMap.get(preTaskName).getVersion(),
+                            
taskDefinitionMap.get(taskNode.getName()).getCode(),
+                            
taskDefinitionMap.get(taskNode.getName()).getVersion(),
                             ConditionType.of("none"),
                             taskNode.getConditionResult(),
                             now,
@@ -2388,8 +2404,8 @@ public class ProcessService {
                         processDefinition.getCode(),
                         0L, // this isn't previous task node, set zero
                         0,
-                        taskNameAndCode.get(taskNode.getName()).getCode(),
-                        taskNameAndCode.get(taskNode.getName()).getVersion(),
+                        taskDefinitionMap.get(taskNode.getName()).getCode(),
+                        taskDefinitionMap.get(taskNode.getName()).getVersion(),
                         ConditionType.of("none"),
                         taskNode.getConditionResult(),
                         now,
@@ -2404,6 +2420,7 @@ public class ProcessService {
             processTaskRelationLog.setOperateTime(now);
             processTaskRelationLogMapper.insert(processTaskRelationLog);
         }
+        return 0;
     }
 
     public int saveTaskDefinition(User operator, Long projectCode, TaskNode 
taskNode, TaskDefinition taskDefinition) {

Reply via email to