|
|
|
@ -98,14 +98,16 @@ public class DagHelper {
|
|
|
|
|
List<TaskNode> childNodeList = new ArrayList<>(); |
|
|
|
|
if (startNode == null) { |
|
|
|
|
logger.error("start node name [{}] is not in task node list [{}] ", |
|
|
|
|
startNodeName, |
|
|
|
|
taskNodeList |
|
|
|
|
startNodeName, |
|
|
|
|
taskNodeList |
|
|
|
|
); |
|
|
|
|
continue; |
|
|
|
|
} else if (TaskDependType.TASK_POST == taskDependType) { |
|
|
|
|
childNodeList = getFlowNodeListPost(startNode, taskNodeList); |
|
|
|
|
List<String> visitedNodeNameList = new ArrayList<>(); |
|
|
|
|
childNodeList = getFlowNodeListPost(startNode, taskNodeList, visitedNodeNameList); |
|
|
|
|
} else if (TaskDependType.TASK_PRE == taskDependType) { |
|
|
|
|
childNodeList = getFlowNodeListPre(startNode, recoveryNodeNameList, taskNodeList); |
|
|
|
|
List<String> visitedNodeNameList = new ArrayList<>(); |
|
|
|
|
childNodeList = getFlowNodeListPre(startNode, recoveryNodeNameList, taskNodeList, visitedNodeNameList); |
|
|
|
|
} else { |
|
|
|
|
childNodeList.add(startNode); |
|
|
|
|
} |
|
|
|
@ -128,14 +130,19 @@ public class DagHelper {
|
|
|
|
|
* @param taskNodeList taskNodeList |
|
|
|
|
* @return task node list |
|
|
|
|
*/ |
|
|
|
|
private static List<TaskNode> getFlowNodeListPost(TaskNode startNode, List<TaskNode> taskNodeList) { |
|
|
|
|
private static List<TaskNode> getFlowNodeListPost(TaskNode startNode, List<TaskNode> taskNodeList, List<String> visitedNodeNameList) { |
|
|
|
|
List<TaskNode> resultList = new ArrayList<>(); |
|
|
|
|
for (TaskNode taskNode : taskNodeList) { |
|
|
|
|
List<String> depList = taskNode.getDepList(); |
|
|
|
|
if (null != depList && null != startNode && depList.contains(startNode.getName())) { |
|
|
|
|
resultList.addAll(getFlowNodeListPost(taskNode, taskNodeList)); |
|
|
|
|
if (null != depList && null != startNode && depList.contains(startNode.getName()) && !visitedNodeNameList.contains(taskNode.getName())) { |
|
|
|
|
resultList.addAll(getFlowNodeListPost(taskNode, taskNodeList, visitedNodeNameList)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// why add (startNode != null) condition? for SonarCloud Quality Gate passed
|
|
|
|
|
if (null != startNode) { |
|
|
|
|
visitedNodeNameList.add(startNode.getName()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
resultList.add(startNode); |
|
|
|
|
return resultList; |
|
|
|
|
} |
|
|
|
@ -148,7 +155,7 @@ public class DagHelper {
|
|
|
|
|
* @param taskNodeList taskNodeList |
|
|
|
|
* @return task node list |
|
|
|
|
*/ |
|
|
|
|
private static List<TaskNode> getFlowNodeListPre(TaskNode startNode, List<String> recoveryNodeNameList, List<TaskNode> taskNodeList) { |
|
|
|
|
private static List<TaskNode> getFlowNodeListPre(TaskNode startNode, List<String> recoveryNodeNameList, List<TaskNode> taskNodeList, List<String> visitedNodeNameList) { |
|
|
|
|
|
|
|
|
|
List<TaskNode> resultList = new ArrayList<>(); |
|
|
|
|
|
|
|
|
@ -158,16 +165,23 @@ public class DagHelper {
|
|
|
|
|
resultList.add(startNode); |
|
|
|
|
} |
|
|
|
|
if (CollectionUtils.isEmpty(depList)) { |
|
|
|
|
if (null != startNode) { |
|
|
|
|
visitedNodeNameList.add(startNode.getName()); |
|
|
|
|
} |
|
|
|
|
return resultList; |
|
|
|
|
} |
|
|
|
|
for (String depNodeName : depList) { |
|
|
|
|
TaskNode start = findNodeByName(taskNodeList, depNodeName); |
|
|
|
|
if (recoveryNodeNameList.contains(depNodeName)) { |
|
|
|
|
resultList.add(start); |
|
|
|
|
} else { |
|
|
|
|
resultList.addAll(getFlowNodeListPre(start, recoveryNodeNameList, taskNodeList)); |
|
|
|
|
} else if (!visitedNodeNameList.contains(depNodeName)) { |
|
|
|
|
resultList.addAll(getFlowNodeListPre(start, recoveryNodeNameList, taskNodeList, visitedNodeNameList)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// why add (startNode != null) condition? for SonarCloud Quality Gate passed
|
|
|
|
|
if (null != startNode) { |
|
|
|
|
visitedNodeNameList.add(startNode.getName()); |
|
|
|
|
} |
|
|
|
|
return resultList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -369,7 +383,7 @@ public class DagHelper {
|
|
|
|
|
*/ |
|
|
|
|
public static boolean haveConditionsAfterNode(String parentNodeName, |
|
|
|
|
DAG<String, TaskNode, TaskNodeRelation> dag |
|
|
|
|
){ |
|
|
|
|
){ |
|
|
|
|
boolean result = false; |
|
|
|
|
Set<String> subsequentNodes = dag.getSubsequentNodes(parentNodeName); |
|
|
|
|
if(CollectionUtils.isEmpty(subsequentNodes)){ |
|
|
|
|