主要对象定义
Framework
src/slave/slave.hpp
- 888-892:定义了两种状态RUNNING/TERMINATING
- 897:指向agent的指针
- 899:info:FrameworkInfo,framework相关信息
- 906:pid:framework对应的调度器的pid,若使用HTTP接口则没有pid,消息通过master传递
- 909:pending:挂起的tasks
- 912:executors:运行的executors
- 915:completedExecutors已经完成的executors
877-884:定义几个函数
- 启动executor
- 删除executor
- 根据ID获得executor
- 根据task ID获得对应的executor
- 恢复executor状态
- checkpointFramework
Framework的实现在src/slave/slave.cpp
初始化
5577-5585定义了Framework构造函数:状态设为RUNNING,根据参数初始化slave、info、pid,初始化completedExecutors
Framework::checkpointFramework
调用state::checkpoint
Framework::launchExecutor
参数:
- executorInfo
taskInfo
5631-5632:生成一个随机UUID,作为executor的容器ID
- 5635-5650:从info中获得用户名
- 5654-5660:为executor创建目录
- 5662-5663:新的Executor对象
- 5665-5666:若需要,则执行恢复
- 5672:将刚生成的executor登记在本Framework的executors中,表示正在运行的executors
- 5679-5682:获得executor/framework的ID,获得slave的PID
- 5684-5692:设置authorize为lambda函数,将调用Slave::authorizeSandboxAccess
- 5694-5695:调用slave->files->attach,该函数完成后得到。。。。在该组上对每一个调用Slave::fileAttached
- 5702-5705:得到executorInfo_并计算resources
- 5709:若executor不是一个command executor,则
- 5714-5721:task是包含在executor中的,调用slave->containerizer->launch,不需要提供taskInfo。什么情况是这样的呢?????????
- 5722-5740:task未包含在executor中,是定义了一个命令或是容器运行,调用slave->containerizer->launch,需要提供taskInfo
- 5742-5747:对刚刚启动的每个task,调用Slave::executorLaunched
- 5750-5755:确保在给定的时间内注册上了,调用Slave::registerExecutorTimeout
FrameworkInfo、FrameworkID在include/mesos/mesos.proto定义