dtm_master_running_flow
2016-08-03 15:29:56 0 举报
`dtm_master_running_flow` 是一个流程或方法,用于监控和管理分布式事务管理器(DTM)的主节点运行状态。这个流程确保主节点的正常运行,以便在分布式系统中协调和控制事务的提交和回滚。通过实时监控主节点的健康状态、资源利用率和性能指标,可以及时发现并解决潜在问题,确保整个系统的稳定运行。此外,`dtm_master_running_flow` 还可以与其他组件协同工作,如事务协调器、资源管理器等,共同维护分布式事务的一致性和完整性。总之,`dtm_master_running_flow` 是确保分布式系统事务管理高效、可靠运行的关键流程。
作者其他创作
大纲/内容
从服务Socket中accept出新的Client Socket并放入epoll,监听OUT事件
Y
是常规Client Socket与Client通信,接受并处理控制命令
为新子进程在共享内存中登记
从Master继承过来的所有Pipe关掉所有Control侧Pipe关掉除自己外其它所有Worker侧Pipe
复用上一个子进程的Pipe
初始化accept锁调度队列
检查是否自己当前持有accept锁如果有,标记accept_held如果没有,timeout为1
end of while
N
将子进程在共享内存中注销
是否是有标记的子进程
标记all_finished=1遍历epoll中所有fd
创建Nonblock主服务Socket开始Listen
是否有子进程退出
创建本进程epoll
Master
将控制Socket放入epoll,监听IN事件
创建新一批子进程
处理Control指令
遍历本次epoll返回的ready fd
已收到shutdown信号?
如果accept_held,释放锁
为每个子进程创建一副Pipe
向当前所有非Control的子进程发送shutdown信号
阻塞epoll_wait,超时为timeout
为每个子进程在共享内存中登记
待处理队列有事件?
标记all_finished=0
初始化共享内存,作用:进程间抢锁、子进程登记
向与Control相连的管道write响应
对整个进程组Nonblock地waitpid
如果是服务Socket,是新连接
while 没有收到shutdown信号或all_finished=0
end of Master
清空子进程对应的Pipe两端
pselect 100ms
如果需要控制Master/Worker行为通过它们对应的Pipe进行
创建全部子进程Control除外,因为已存在
若为Worker且当前持有accept锁强制释放并移出调度队列
处理待处理队列中的Socket和事件
有标记的子进程说明是被Master显式有意杀死的无需重启
将每个Worker进程放入accept锁调度队列
是常规Client/Server Socket与Client或MySQL继续通信,进行实际请求的处理
执行配置中心逻辑
打开dtm.log日志文件
是Control发来控制指令read ctrl_channel并做处理
在channel上阻塞read来自Control的通知(Control会将每一个新生的Worker更新到最新状态)
Nonblock地读与Control进程相连的管道
进行wait_build和prepare_lock相关逻辑,暂不关心
while 没有收到shutdown或reload的signal
创建Nonblock控制Socket开始Listen
有Control指令?
如果收到shutdown信号,且accept_held将服务Socket从epoll中移除
将Socket和事件放入待处理队列
从Master继承过来的所有Pipe关掉所有Worker/Master侧Pipe
向所有子进程发送shutdown信号
读取配置文件更新内存中的配置信息
对退出子进程进行收割
是否start所有子进程(Control指令之一)
收割所有退出的子进程
while 没有收到shutdown信号
是ctrl_channel?
timeout设为check_timeout/1
为Client Socket?
将服务Socket和ctrl_channel放入epoll,监听IN事件
将自己侧Pipe标为ctrl_channel
有新生子进程需要发送控制指令?
读入配置文件将全部MySQL、Redis连接信息存入内存
向该子进程的Pipe发送控制指令
标记当前所有非Control的子进程
end of 遍历
是否shutdown所有子进程(Control指令之一)
初始化signal handlersSIGTERM - shutdownSIGWINCH - reloadSIGALRM - loadconf
创建全部子进程
如收到shutdown信号,断开
如果收到reload信号则exec新的binary进行重启
如果为Worker则放入accept锁调度队列
当前是否没有任何子进程Control除外
如果超过server_timeout/1200无活动,断开
重启一个与退出子进程同类的子进程
读取共享内存,遍历当前注册的子进程
向有标记的子进程(即老子进程)发送shutdown信号
对已存在子进程进行标记
更新Control自己维持的当前alive子进程列表
如该Client连接上无active请求
是否收到loadconf的signal
重新初始化日志关闭继承于Master的dtm.log的fd打开worker_process.log
重新初始化日志关闭继承于Master的dtm.log的fd打开control_process.log
执行accept调度如果上一次Worker已经释放锁,让队列中的下一个Worker持有锁如果没有,do nothing
accept_held?
如超过client_timeout/1200无活动,断开
0 条评论
下一页