|
|
|
@ -82,6 +82,7 @@ import org.apache.dolphinscheduler.server.master.graph.IWorkflowGraph;
|
|
|
|
|
import org.apache.dolphinscheduler.server.master.metrics.TaskMetrics; |
|
|
|
|
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnable; |
|
|
|
|
import org.apache.dolphinscheduler.server.master.runner.execute.DefaultTaskExecuteRunnableFactory; |
|
|
|
|
import org.apache.dolphinscheduler.server.master.runner.execute.TaskExecuteRunnable; |
|
|
|
|
import org.apache.dolphinscheduler.server.master.utils.TaskUtils; |
|
|
|
|
import org.apache.dolphinscheduler.server.master.utils.WorkflowInstanceUtils; |
|
|
|
|
import org.apache.dolphinscheduler.service.alert.ProcessAlertManager; |
|
|
|
@ -122,6 +123,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
|
|
|
|
|
|
import com.google.common.annotations.VisibleForTesting; |
|
|
|
|
import com.google.common.collect.Lists; |
|
|
|
|
import com.google.common.collect.Sets; |
|
|
|
|
|
|
|
|
@ -983,7 +985,7 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// 4. submit to dispatch queue
|
|
|
|
|
taskExecuteRunnable.dispatch(); |
|
|
|
|
tryToDispatchTaskInstance(taskInstance, taskExecuteRunnable); |
|
|
|
|
|
|
|
|
|
stateWheelExecuteThread.addTask4TimeoutCheck(workflowInstance, taskInstance); |
|
|
|
|
return true; |
|
|
|
@ -996,6 +998,35 @@ public class WorkflowExecuteRunnable implements IWorkflowExecuteRunnable {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Sometimes (such as pause), if the task instance status has already been finished, |
|
|
|
|
* there is no need to dispatch it |
|
|
|
|
*/ |
|
|
|
|
@VisibleForTesting |
|
|
|
|
void tryToDispatchTaskInstance(TaskInstance taskInstance, TaskExecuteRunnable taskExecuteRunnable) { |
|
|
|
|
if (!taskInstance.getState().isFinished()) { |
|
|
|
|
taskExecuteRunnable.dispatch(); |
|
|
|
|
} else { |
|
|
|
|
if (workflowExecuteContext.getWorkflowInstance().isBlocked()) { |
|
|
|
|
TaskStateEvent processBlockEvent = TaskStateEvent.builder() |
|
|
|
|
.processInstanceId(workflowExecuteContext.getWorkflowInstance().getId()) |
|
|
|
|
.taskInstanceId(taskInstance.getId()) |
|
|
|
|
.status(taskInstance.getState()) |
|
|
|
|
.type(StateEventType.PROCESS_BLOCKED) |
|
|
|
|
.build(); |
|
|
|
|
this.stateEvents.add(processBlockEvent); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TaskStateEvent taskStateChangeEvent = TaskStateEvent.builder() |
|
|
|
|
.processInstanceId(workflowExecuteContext.getWorkflowInstance().getId()) |
|
|
|
|
.taskInstanceId(taskInstance.getId()) |
|
|
|
|
.status(taskInstance.getState()) |
|
|
|
|
.type(StateEventType.TASK_STATE_CHANGE) |
|
|
|
|
.build(); |
|
|
|
|
this.stateEvents.add(taskStateChangeEvent); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* find task instance in db. |
|
|
|
|
* in case submit more than one same name task in the same time. |
|
|
|
|