辅助对象
scheduler
mesos.reset(new Mesos(
master,
mesos::ContentType::PROTOBUF,
process::defer(self(), &Self::connected),
process::defer(self(), &Self::disconnected),
process::defer(self(), &Self::received, lambda::_1),
credential));
src/scheduler/scheduler.cpp
mesos::v1::scheduler::Mesos
构建函数
class MesosProcess : public ProtobufProcess<MesosProcess>
- 142-148:初始化私有变量,状态为DISCONNECTED、初始化回调函数、认证信息等等
- 150:初始化libprocess
- 167:初始化log
- 181-193:调用MasterDetector::create创建detector并调用detector.reset
send(call)
- 237-251:构造POST请求
- 256-260:发送SUBSCRIBE类型调用
- 261-268:发送非SUBSCRIBE类型调用
- 271-275:收到response后,调用_send
initialize
- 299-300:检测master,调用detector->detect得到masterinfo,再调用detected
detected
参数:MasterInfo类型的Future变量,future
- 418-425:若状态是CONNECTED/SUBSCRIBING/SUBSCRIBED,调用回调函数中的disconnected断连
- 428:disconnect,断连
- 430-439:若future无相应内容或已经被抛弃,则将master置为空
- 439:MasterInfo存在,进行连接动作:
- 440-459:构建针对master的请求地址,可能是SSL
- 463:生成随机UUID作为连接ID
- 467-473:延迟一个随机值(从0到flags.connectionDelayMax)再调用connect
- 477-478:和函数initialize一样,调用detector->detect得到masterinfo,再调用detected。这里的意思是每隔一段时间会再检测master,且再连接master????(可能detector->detect会一直阻塞吧?????????)
connect
参数:
- _connectionId
流程:
- 315:状态改为CONNECTING
- 317-319:初始化一个lambda函数connector,该函数调用process::http::connect(master.get())连接master
- 323-324:调用两次connector创建两个连接,在每个连接上再调用connected
connected
参数:
- _connectionId
- _connections:两个连接
流程:
- 333-347:一些错误检查
- 351:状态改为CONNECTED
- 353-354:从_connections得到两个连接放在变量connections(是本对象的私有变量)中
- 356-366:在connections两个连接上都先调用其定义的disconnected再调用本对象的disconnected
- 370-374:调用回调函数的connected
executor
src/executor/executor.cpp
mesos::v1::executor::Mesos
这个对象负责从agent接收消息(通过事件)及发送消息给agent(通过call)。
class MesosProcess : public ProtobufProcess<MesosProcess>
构建函数
MesosProcess
- 174:初始化libprocess
- 190:启动VersionProcess
- 193:是否设置了MESOS_LOCAL(为了测试)
- 195-202:从环境变量得到agent的PID
- 207-212:构造访问agent的网址
- 215-216:检查环境变量是否有CHECKPOINT
- 218-249:如果有CHECKPOINT,设置相关变量
- 235-249:得到MESOS_SUBSCRIPTION_BACKOFF_MAX
- 252-265:得到MESOS_EXECUTOR_SHUTDOWN_GRACE_PERIOD