|
|
|
@ -24,6 +24,7 @@ import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_RECOVER_PRO
|
|
|
|
|
import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS; |
|
|
|
|
import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS_DEFINE_ID; |
|
|
|
|
import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS_PARENT_INSTANCE_ID; |
|
|
|
|
import static org.apache.dolphinscheduler.common.Constants.LOCAL_PARAMS; |
|
|
|
|
import static org.apache.dolphinscheduler.common.Constants.YYYY_MM_DD_HH_MM_SS; |
|
|
|
|
|
|
|
|
|
import static java.util.stream.Collectors.toSet; |
|
|
|
@ -32,6 +33,7 @@ import org.apache.dolphinscheduler.common.Constants;
|
|
|
|
|
import org.apache.dolphinscheduler.common.enums.AuthorizationType; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.CommandType; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.CycleEnum; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.Direct; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.ExecutionStatus; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.FailureStrategy; |
|
|
|
|
import org.apache.dolphinscheduler.common.enums.Flag; |
|
|
|
@ -89,6 +91,7 @@ import java.util.Date;
|
|
|
|
|
import java.util.EnumMap; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.HashSet; |
|
|
|
|
import java.util.Iterator; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Objects; |
|
|
|
@ -103,6 +106,8 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
|
|
import com.cronutils.model.Cron; |
|
|
|
|
import com.fasterxml.jackson.databind.JsonNode; |
|
|
|
|
import com.fasterxml.jackson.databind.node.ArrayNode; |
|
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -686,11 +691,6 @@ public class ProcessService {
|
|
|
|
|
} else { |
|
|
|
|
processInstance = this.findProcessInstanceDetailById(processInstanceId); |
|
|
|
|
// Recalculate global parameters after rerun.
|
|
|
|
|
processInstance.setGlobalParams(ParameterUtils.curingGlobalParams( |
|
|
|
|
processDefinition.getGlobalParamMap(), |
|
|
|
|
processDefinition.getGlobalParamList(), |
|
|
|
|
getCommandTypeIfComplement(processInstance, command), |
|
|
|
|
processInstance.getScheduleTime())); |
|
|
|
|
} |
|
|
|
|
processDefinition = processDefineMapper.selectById(processInstance.getProcessDefinitionId()); |
|
|
|
|
processInstance.setProcessDefinition(processDefinition); |
|
|
|
@ -1193,10 +1193,10 @@ public class ProcessService {
|
|
|
|
|
*/ |
|
|
|
|
public ExecutionStatus getSubmitTaskState(TaskInstance taskInstance, ExecutionStatus processInstanceState) { |
|
|
|
|
ExecutionStatus state = taskInstance.getState(); |
|
|
|
|
if ( |
|
|
|
|
// running, delayed or killed
|
|
|
|
|
// the task already exists in task queue
|
|
|
|
|
// return state
|
|
|
|
|
if ( |
|
|
|
|
state == ExecutionStatus.RUNNING_EXECUTION |
|
|
|
|
|| state == ExecutionStatus.DELAY_EXECUTION |
|
|
|
|
|| state == ExecutionStatus.KILL |
|
|
|
@ -1541,15 +1541,75 @@ public class ProcessService {
|
|
|
|
|
int processId, |
|
|
|
|
String appIds, |
|
|
|
|
int taskInstId, |
|
|
|
|
String varPool) { |
|
|
|
|
String varPool, |
|
|
|
|
String result) { |
|
|
|
|
taskInstance.setPid(processId); |
|
|
|
|
taskInstance.setAppLink(appIds); |
|
|
|
|
taskInstance.setState(state); |
|
|
|
|
taskInstance.setEndTime(endTime); |
|
|
|
|
taskInstance.setVarPool(varPool); |
|
|
|
|
changeOutParam(result, taskInstance); |
|
|
|
|
saveTaskInstance(taskInstance); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void changeOutParam(String result, TaskInstance taskInstance) { |
|
|
|
|
if (StringUtils.isEmpty(result)) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
List<Map<String, String>> workerResultParam = getListMapByString(result); |
|
|
|
|
if (CollectionUtils.isEmpty(workerResultParam)) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
//if the result more than one line,just get the first .
|
|
|
|
|
Map<String, String> row = workerResultParam.get(0); |
|
|
|
|
if (row == null || row.size() == 0) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
TaskNode taskNode = JSONUtils.parseObject(taskInstance.getTaskJson(), TaskNode.class); |
|
|
|
|
Map<String, Object> taskParams = JSONUtils.toMap(taskNode.getParams(), String.class, Object.class); |
|
|
|
|
Object localParams = taskParams.get(LOCAL_PARAMS); |
|
|
|
|
if (localParams == null) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
ProcessInstance processInstance = this.processInstanceMapper.queryDetailById(taskInstance.getProcessInstanceId()); |
|
|
|
|
List<Property> params4Process = JSONUtils.toList(processInstance.getGlobalParams(), Property.class); |
|
|
|
|
Map<String, Property> allParamMap = params4Process.stream().collect(Collectors.toMap(Property::getProp, Property -> Property)); |
|
|
|
|
|
|
|
|
|
List<Property> allParam = JSONUtils.toList(JSONUtils.toJsonString(localParams), Property.class); |
|
|
|
|
for (Property info : allParam) { |
|
|
|
|
if (info.getDirect() == Direct.OUT) { |
|
|
|
|
String paramName = info.getProp(); |
|
|
|
|
Property property = allParamMap.get(paramName); |
|
|
|
|
if (property == null) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
String value = row.get(paramName); |
|
|
|
|
if (StringUtils.isNotEmpty(value)) { |
|
|
|
|
property.setValue(value); |
|
|
|
|
info.setValue(value); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
taskParams.put(LOCAL_PARAMS, allParam); |
|
|
|
|
taskNode.setParams(JSONUtils.toJsonString(taskParams)); |
|
|
|
|
// task instance node json
|
|
|
|
|
taskInstance.setTaskJson(JSONUtils.toJsonString(taskNode)); |
|
|
|
|
String params4ProcessString = JSONUtils.toJsonString(params4Process); |
|
|
|
|
int updateCount = this.processInstanceMapper.updateGlobalParamById(params4ProcessString, processInstance.getId()); |
|
|
|
|
logger.info("updateCount:{}, params4Process:{}, processInstanceId:{}", updateCount, params4ProcessString, processInstance.getId()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<Map<String, String>> getListMapByString(String json) { |
|
|
|
|
List<Map<String, String>> allParams = new ArrayList<>(); |
|
|
|
|
ArrayNode paramsByJson = JSONUtils.parseArray(json); |
|
|
|
|
Iterator<JsonNode> listIterator = paramsByJson.iterator(); |
|
|
|
|
while (listIterator.hasNext()) { |
|
|
|
|
Map<String, String> param = JSONUtils.toMap(listIterator.next().toString(), String.class, String.class); |
|
|
|
|
allParams.add(param); |
|
|
|
|
} |
|
|
|
|
return allParams; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* convert integer list to string list |
|
|
|
|
* |
|
|
|
|