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)当所有的任务都成功执行之后退出
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)当所有的任务都成功执行之后退出
相关文章推荐
- java方法,构造方法编程题
- JAVA多线程-Lock的使用(一)-ReentrantLock与Condition
- Metasploit 整理笔记
- Solr分页查询代码,包含查询,分页,高亮及获取高亮处摘要代码
- C/C++程序开发中实现信息隐藏的三种类型
- 重写equals要遵守的规则
- springMVC1 springmvc的基础知识
- python第五天
- ubuntu安装jdk6
- django进行model字段的自定义
- SpringMVC上传文件MultipartFile
- JAVA中的集合与泛型整理总结
- 《转》 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- [Python] re(正则表达式) 模块使用方法
- java垃圾回收技术
- Spark
- java 取随机数
- c语言入门之项目2.6——求1到m的乘积
- java runtime.exec常见问题
- java中list或set转map的方法