DolphinScheduler2.0执行流程-MasterServer
术语:
process 工作流
process definition 工作流定义
process instance 工作流实例
task instance 任务实例
Master运行流程
启动master
MasterServer的main()方法
MasterServer的run()方法
初始化netty远程服务
注册到zookeeper
启动容错
调用MasterSchedulerService.start方法,start方法实际调用了Thread.start方法,Thread.start调用的是MasterSchedulerService.run方法
MasterSchedulerService的run()方法
进入一个死循环(一定条件下可以退出)
检查资源是否够用(mem,cpu),如果资源不够,睡1秒
调用scheduleProcess()方法
调用findOneCommand()方法
调用handleCommand()方法返回一个processInstance,将一个command转换成processInstance,并删除command
如果processInstance不为空,则利用processInstance信息生成一个WorkflowExecuteThread实例
调用masterExecService.execute(workflowExecuteThread),把workflowExecuteThread加入masterExecService线程池。
workflowExecuteThread的run()方法
run()调用 startProcess()方法
调用buildFlowDag来构建工作流dag图(build process dag)
调用initTaskQueue来初始化任务队列(init task queue)
调用submitPostNode(null)提交初始节点
submitPostNode方法第一次运行会将dag图的初始节点(第一个task instance)加入standByList,然后调用submitStandByTask运行standByList中就绪的task instance.
而submitStandByTask运行成功后又会返回来再次调用submitPostNode()方法,使得运行成功的task instance节点的后续节点能够加入到standByList。
submitStandByTask中也会调用submitTaskExec(task)方法运行。
submitTaskExec()方法会调用taskProcessor.submit()方法
taskProcessor.submit()调用时候有多种选择,一般走CommonTaskProcessor类的submit()方法,当然还有ConditionTaskProcessor/DependentTaskProcessor/SubTaskProcessor/SwitchTaskProcessor等类的submit方法。
submit()方法会执行processService.submitTask()方法和CommonTaskProcessor.dispatchTask()方法
submitTask()方法会将task存入db,将子工作流存入command表。
dispatchTask()方法有待进一步探究
submitTaskExec()紧接着会调用taskProcessor.run()方法
run()调用 handleEvents()方法