您的位置:首页 > 编程语言

DC4C代码阅读(11)——与DAG有关的结构以及函数

2016-02-21 13:02 330 查看
结构体介绍

dag_schedule_configfile 与配置文件一一对应,一个dag_schedule_configfile就表示一个配置文件。配置文件中存放者多批量任务的信息,多批量任务就是一个多批量任务中有多个批量任务,一个批量任务中又有多个任务,任务与执行程序是一一对应的。

Dc4cDagSchedule是一个调度信息结构,它包含多个批量任务,用链表来存放这些批量任务的指针,是线性存放的。至于如何形成DAG图,则是由Dc4cDagBatch的上游节点和下游节点来确定的

Dc4cDagBatch表示一个批量任务(批量任务中的任务没有先后顺序的优先级),一个批量任务有多个任务。它内部用链表存放了上游节点的指针和下游节点的指针,这样就能够形成先后的依赖关系;除了能够表示依赖关系之外,上游节点执行结束的时候,调度函数检查节点所有的上游节点是否都执行结束,如果上游节点都执行结束了,那么启动该节点,否则一直等到上游节点都执行结束;如果当前节点执行结束了,那么检查该节点的所有下游节点,判断某一个下游节点的的上游节点是否都已经执行结束,如果某一个下游节点的上游节点都执行结束了,那么可以启动这个下游节点来执行,否则不能执行这个下游节点。

函数介绍:

FindDagBatch函数根据批量任务的名字查找一个批量任务

_LoadDagScheduleFromStruct递归的从一个配置文件结构(dag_schedule_configfile)中加载调度信息

DC4CLoadDagScheduleFromStruct是_LoadDagScheduleFromStruct的包装函数

DC4CLoadDagScheduleFromFile先打开配置文件,然后调用DC4CLoadDagScheduleFromStruct加载调度信息

DC4CUnloadDagSchedule卸载调度结构,实质就是释放内存

DC4CExecuteDagSchedule是一个重要的函数,它是执行DAG工作流的入口函数:

1、调用DC4CBeginDagSchedule函数进行初始化

(1)设置DAG的任务

(2)DAG分配环境数组

(3)找到DAG的根节点(第一个要执行的节点,这个节点没有放置任何任务,是一个空节点,只起到标识开始的作用)

(4)在循环中对根节点下游节点进行以下处理:

(4.1)初始化环境信息

(4.2)设置选项

(4.3)设置回调函数

(4.4)调用DC4CBeginBatchTasks

4.4.1)设置任务的数量

4.4.2)调用ReformingTasksArray对请求对象(req)数组和回应对象(rsp)数组进行初始化

4.4.3)遍历每一个任务,根据任务的信息设置对应的环境对象的信息

4.4.4)设置调度结构的worker的数量(根据task的数量来设置)

4.4.5)把任务都添加到调度结构的executing_batches_tree中

(4.5)调用钩子函数(任务开始调度时的钩子函数)

2、循环调用DC4CPerformDagSchedule执行任务

(1)在一个for循环中遍历执行树(其实也是一个列表)的所有节点,调整环境对象的数量。这个循环的实际作用就是,把将要执行的任务(就是放在调度结构的executing_batches_tree中的任务)的环境对象全部都放在调度结构中,因为下一步的DC4CPerformMultiBatchTasks函数的参数是环境结构数组,因此需要这样调整。

(2)调用DC4CPerformMultiBatchTasks执行批量任务

(3)如果执行成功,那么调用钩子函数(任务执行结束时的钩子函数),否则进行其他的一些错误处理

(4)当所有的任务都成功执行之后退出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: