You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by le...@apache.org on 2021/02/03 03:22:43 UTC
[incubator-dolphinscheduler] branch 1.3.5-prepare updated:
[1.3.5-prepare][cherry-pick]#4555 update branch name error (#4662)
This is an automated email from the ASF dual-hosted git repository.
leonbao pushed a commit to branch 1.3.5-prepare
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/1.3.5-prepare by this push:
new 14daebd [1.3.5-prepare][cherry-pick]#4555 update branch name error (#4662)
14daebd is described below
commit 14daebd7f0998e1c5011ce67d1801a3ec81db62e
Author: Kirs <ac...@163.com>
AuthorDate: Wed Feb 3 11:22:33 2021 +0800
[1.3.5-prepare][cherry-pick]#4555 update branch name error (#4662)
It solves the problem that the name of the branch will not change after the name of the branch is changed in the workflow page and instance page.
---
.../api/service/ProcessDefinitionService.java | 4 +
.../api/service/ProcessInstanceService.java | 14 ++-
.../task/conditions/ConditionsParameters.java | 7 ++
.../service/process/ProcessService.java | 57 +++++++++++
.../service/process/ProcessServiceTest.java | 109 +++++++++++++++++++++
5 files changed, 186 insertions(+), 5 deletions(-)
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
index 2312c99..13cdc11 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
@@ -403,6 +403,10 @@ public class ProcessDefinitionService extends BaseDAGService {
}
}
+ // get the processdefinitionjson before saving,and then save the name and taskid
+ String oldJson = processDefine.getProcessDefinitionJson();
+ processDefinitionJson = processService.changeJson(processData,oldJson);
+
Date now = new Date();
processDefine.setId(id);
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
index b5b5c66..f6ec3f9 100644
--- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java
@@ -359,16 +359,15 @@ public class ProcessInstanceService extends BaseDAGService {
processInstance.getName(), processInstance.getState().toString(), "update");
return result;
}
- Date schedule = null;
+ Date schedule ;
+ schedule = processInstance.getScheduleTime();
if (scheduleTime != null) {
schedule = DateUtils.getScheduleDate(scheduleTime);
- } else {
- schedule = processInstance.getScheduleTime();
}
processInstance.setScheduleTime(schedule);
processInstance.setLocations(locations);
processInstance.setConnects(connects);
- String globalParams = null;
+ String globalParams;
String originDefParams = null;
int timeout = processInstance.getTimeout();
ProcessDefinition processDefinition = processService.findProcessDefineById(processInstance.getProcessDefinitionId());
@@ -392,13 +391,18 @@ public class ProcessInstanceService extends BaseDAGService {
if(tenant != null){
processInstance.setTenantCode(tenant.getTenantCode());
}
+ // get the processinstancejson before saving,and then save the name and taskid
+ String oldJson = processInstance.getProcessInstanceJson();
+ if (StringUtils.isNotEmpty(oldJson)) {
+ processInstanceJson = processService.changeJson(processData,oldJson);
+ }
processInstance.setProcessInstanceJson(processInstanceJson);
processInstance.setGlobalParams(globalParams);
}
int update = processService.updateProcessInstance(processInstance);
int updateDefine = 1;
- if (Boolean.TRUE.equals(syncDefine) && StringUtils.isNotEmpty(processInstanceJson)) {
+ if (Boolean.TRUE.equals(syncDefine)) {
processDefinition.setProcessDefinitionJson(processInstanceJson);
processDefinition.setGlobalParams(originDefParams);
processDefinition.setLocations(locations);
diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/conditions/ConditionsParameters.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/conditions/ConditionsParameters.java
index 7f0f2c8..43ba825 100644
--- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/conditions/ConditionsParameters.java
+++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/task/conditions/ConditionsParameters.java
@@ -36,6 +36,13 @@ public class ConditionsParameters extends AbstractParameters {
private List<String> failedNode;
+ public String getConditionResult() {
+ return "{"
+ + "\"successNode\": [\"" + successNode.get(0)
+ + "\"],\"failedNode\": [\"" + failedNode.get(0)
+ + "\"]}";
+ }
+
@Override
public boolean checkParameters() {
return true;
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 f1a554f..484985a 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
@@ -25,6 +25,7 @@ import org.apache.dolphinscheduler.common.enums.*;
import org.apache.dolphinscheduler.common.model.DateInterval;
import org.apache.dolphinscheduler.common.model.TaskNode;
import org.apache.dolphinscheduler.common.process.Property;
+import org.apache.dolphinscheduler.common.task.conditions.ConditionsParameters;
import org.apache.dolphinscheduler.common.task.subprocess.SubProcessParameters;
import org.apache.dolphinscheduler.common.utils.*;
import org.apache.dolphinscheduler.dao.entity.*;
@@ -1906,4 +1907,60 @@ public class ProcessService {
taskInstance.getId());
}
+ /**
+ * solve the branch rename bug
+ *
+ * @param processData
+ * @param oldJson
+ * @return String
+ */
+ public String changeJson(ProcessData processData, String oldJson) {
+ ProcessData oldProcessData = JSONUtils.parseObject(oldJson, ProcessData.class);
+ HashMap<String, String> oldNameTaskId = new HashMap<>();
+ List<TaskNode> oldTasks = oldProcessData.getTasks();
+ for (int i = 0; i < oldTasks.size(); i++) {
+ TaskNode taskNode = oldTasks.get(i);
+ String oldName = taskNode.getName();
+ String oldId = taskNode.getId();
+ oldNameTaskId.put(oldName, oldId);
+ }
+
+ // take the processdefinitionjson saved this time, and then save the taskid and name
+ HashMap<String, String> newNameTaskId = new HashMap<>();
+ List<TaskNode> newTasks = processData.getTasks();
+ for (int i = 0; i < newTasks.size(); i++) {
+ TaskNode taskNode = newTasks.get(i);
+ String newId = taskNode.getId();
+ String newName = taskNode.getName();
+ newNameTaskId.put(newId, newName);
+ }
+
+ // replace the previous conditionresult with a new one
+ List<TaskNode> tasks = processData.getTasks();
+ for (int i = 0; i < tasks.size(); i++) {
+ TaskNode taskNode = newTasks.get(i);
+ String type = taskNode.getType();
+ if (TaskType.CONDITIONS.getDescp().equalsIgnoreCase(type)) {
+ ConditionsParameters conditionsParameters = JSONUtils.parseObject(taskNode.getConditionResult(), ConditionsParameters.class);
+ String oldSuccessNodeName = conditionsParameters.getSuccessNode().get(0);
+ String oldFailedNodeName = conditionsParameters.getFailedNode().get(0);
+ String newSuccessNodeName = newNameTaskId.get(oldNameTaskId.get(oldSuccessNodeName));
+ String newFailedNodeName = newNameTaskId.get(oldNameTaskId.get(oldFailedNodeName));
+ if (newSuccessNodeName != null) {
+ ArrayList<String> successNode = new ArrayList<>();
+ successNode.add(newSuccessNodeName);
+ conditionsParameters.setSuccessNode(successNode);
+ }
+ if (newFailedNodeName != null) {
+ ArrayList<String> failedNode = new ArrayList<>();
+ failedNode.add(newFailedNodeName);
+ conditionsParameters.setFailedNode(failedNode);
+ }
+ String conditionResultStr = conditionsParameters.getConditionResult();
+ taskNode.setConditionResult(conditionResultStr);
+ tasks.set(i, taskNode);
+ }
+ }
+ return JSONUtils.toJsonString(processData);
+ }
}
diff --git a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/process/ProcessServiceTest.java b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/process/ProcessServiceTest.java
index 6ca96d9..cd3ca19 100644
--- a/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/process/ProcessServiceTest.java
+++ b/dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/process/ProcessServiceTest.java
@@ -19,12 +19,17 @@ package org.apache.dolphinscheduler.service.process;
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.CommandType;
import org.apache.dolphinscheduler.common.enums.WarningType;
+import org.apache.dolphinscheduler.common.model.TaskNode;
+import org.apache.dolphinscheduler.common.task.conditions.ConditionsParameters;
import org.apache.dolphinscheduler.common.utils.JSONUtils;
import org.apache.dolphinscheduler.dao.entity.Command;
+import org.apache.dolphinscheduler.dao.entity.ProcessData;
import org.apache.dolphinscheduler.dao.entity.ProcessInstance;
import org.apache.dolphinscheduler.dao.entity.ProcessInstanceMap;
import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import java.util.ArrayList;
+
import org.junit.Assert;
import org.junit.Test;
@@ -102,6 +107,110 @@ public class ProcessServiceTest {
);
Assert.assertEquals(CommandType.START_FAILURE_TASK_PROCESS, command.getCommandType());
+ }
+
+
+ @Test
+ public void testChangeJson() {
+
+ ProcessData oldProcessData = new ProcessData();
+ ConditionsParameters conditionsParameters = new ConditionsParameters();
+ ArrayList<TaskNode> tasks = new ArrayList<>();
+ TaskNode taskNode = new TaskNode();
+ TaskNode taskNode11 = new TaskNode();
+ TaskNode taskNode111 = new TaskNode();
+ ArrayList<String> successNode = new ArrayList<>();
+ ArrayList<String> faildNode = new ArrayList<>();
+
+ taskNode.setName("bbb");
+ taskNode.setType("SHELL");
+ taskNode.setId("222");
+
+ taskNode11.setName("vvv");
+ taskNode11.setType("CONDITIONS");
+ taskNode11.setId("444");
+ successNode.add("bbb");
+ faildNode.add("ccc");
+
+ taskNode111.setName("ccc");
+ taskNode111.setType("SHELL");
+ taskNode111.setId("333");
+
+ conditionsParameters.setSuccessNode(successNode);
+ conditionsParameters.setFailedNode(faildNode);
+ taskNode11.setConditionResult(conditionsParameters.getConditionResult());
+ tasks.add(taskNode);
+ tasks.add(taskNode11);
+ tasks.add(taskNode111);
+ oldProcessData.setTasks(tasks);
+
+ ProcessData newProcessData = new ProcessData();
+ ConditionsParameters conditionsParameters2 = new ConditionsParameters();
+ TaskNode taskNode2 = new TaskNode();
+ TaskNode taskNode22 = new TaskNode();
+ TaskNode taskNode222 = new TaskNode();
+ ArrayList<TaskNode> tasks2 = new ArrayList<>();
+ ArrayList<String> successNode2 = new ArrayList<>();
+ ArrayList<String> faildNode2 = new ArrayList<>();
+
+ taskNode2.setName("bbbchange");
+ taskNode2.setType("SHELL");
+ taskNode2.setId("222");
+
+ taskNode22.setName("vv");
+ taskNode22.setType("CONDITIONS");
+ taskNode22.setId("444");
+ successNode2.add("bbb");
+ faildNode2.add("ccc");
+
+ taskNode222.setName("ccc");
+ taskNode222.setType("SHELL");
+ taskNode222.setId("333");
+
+ conditionsParameters2.setSuccessNode(successNode2);
+ conditionsParameters2.setFailedNode(faildNode2);
+ taskNode22.setConditionResult(conditionsParameters2.getConditionResult());
+ tasks2.add(taskNode2);
+ tasks2.add(taskNode22);
+ tasks2.add(taskNode222);
+
+ newProcessData.setTasks(tasks2);
+
+ ProcessData exceptProcessData = new ProcessData();
+ ConditionsParameters conditionsParameters3 = new ConditionsParameters();
+ TaskNode taskNode3 = new TaskNode();
+ TaskNode taskNode33 = new TaskNode();
+ TaskNode taskNode333 = new TaskNode();
+ ArrayList<TaskNode> tasks3 = new ArrayList<>();
+ ArrayList<String> successNode3 = new ArrayList<>();
+ ArrayList<String> faildNode3 = new ArrayList<>();
+
+ taskNode3.setName("bbbchange");
+ taskNode3.setType("SHELL");
+ taskNode3.setId("222");
+
+ taskNode33.setName("vv");
+ taskNode33.setType("CONDITIONS");
+ taskNode33.setId("444");
+ successNode3.add("bbbchange");
+ faildNode3.add("ccc");
+
+ taskNode333.setName("ccc");
+ taskNode333.setType("SHELL");
+ taskNode333.setId("333");
+
+ conditionsParameters3.setSuccessNode(successNode3);
+ conditionsParameters3.setFailedNode(faildNode3);
+ taskNode33.setConditionResult(conditionsParameters3.getConditionResult());
+ tasks3.add(taskNode3);
+ tasks3.add(taskNode33);
+ tasks3.add(taskNode333);
+ exceptProcessData.setTasks(tasks3);
+
+ String expect = JSONUtils.toJsonString(exceptProcessData);
+ String oldJson = JSONUtils.toJsonString(oldProcessData);
+
+ Assert.assertEquals(expect, new ProcessService().changeJson(newProcessData,oldJson));
}
}