dolphinscheduler-任务调度流程
基于v3.2.1
dolphinscheduler
master
ProcessScheduleTask-> quartz 调度
+ 由 Schedule 来创建 Command, 然后 command插入 DB
MasterSchedulerBootstrap->command任务调度
+ findCommands()->根据当前server的slot,查询DBk中所属该master节点所有command列表,并转换成ProcessInstance
+ 将 ProcessInstance 放入 workflowEventQueue
WorkflowEventLooper
+ 向 workflowEventQueue 队列拉取 WorkflowEvent 事件
+ 交给 WorkflowEventHandler.handleWorkflowEvent()
WorkflowStartEventHandler
+ 调用 WorkflowExecuteRunnable.call()方法
WorkflowExecuteRunnable:
+ initTaskQueue()
+ processStart()
+ submitPostNode(null)---> 刚开始,DAG任务图中, 第一个任务节点的父节点为null
+ 创建 TaskInstance
+ 将 TaskInstance 放在 standByTaskInstancePriorityQueue队列 中
+ submitStandByTask()
+ 从 standByTaskInstancePriorityQueue队列 中取出TaskInstance
+ executeTask()
+ 保存TaskInstance到DB
+ 如果是子流程,则创建其孩子节点Command
+ 根据 TaskInstance 创建 DefaultTaskExecuteRunnable
+ tryToDispatchTaskInstance()-> 转发 任务
+ 执行 DefaultTaskExecuteRunnable.dispatch() 任务转发
+ 向stateWheelExecuteThread线程中的taskInstanceTimeoutCheckList 队列添加 taskInstanceKey,用户校验是否超时
DefaultTaskExecuteRunnable
+ 交给 TaskExecuteRunnableOperatorManager.getTaskDispatchOperator() 获取 TaskExecuteRunnableOperator
+ master节点任务 为 LogicTaskExecuteRunnableDispatchOperator
+ 非master任务为 TaskExecuteRunnableDispatchOperator
LogicTaskExecuteRunnableDispatchOperator
+ 将 DefaultTaskExecuteRunnable 交给 globalTaskDispatchWaitingQueue
+ 由 GlobalTaskDispatchWaitingQueueLooper 线程取任务
GlobalTaskDispatchWaitingQueueLooper
+ 从 globalTaskDispatchWaitingQueue 取 DefaultTaskExecuteRunnable
+ 交给 TaskDispatcher.dispatchTask()
MasterTaskDispatcher
+ 创建 代理对象 ILogicTaskInstanceOperator
+ SingletonJdkDynamicRpcClientProxyFactory
+ ClientInvocationHandler
+ 交给 NettyRemotingClient 进行网络通信
+ SyncClientMethodInvoker
+ 执行 ITaskInstanceOperator.dispatchTask()方法
worker
+ ITaskInstanceOperator
+ TaskInstanceDispatchOperationFunction.operate()
+ 根据任务执行上下文TaskExecutionContext 创建 WorkerTaskExecutor
+ WorkerTaskExecutor.run
+ initializeTask()
+ beforeExecute()
+ 根据 taskExecutionContext 创建 AbstractTask,
+ executeTask()
+ afterExecute()