sd_create_hyper_volume—>opcode:SD_OP_NEW_VDI
exec_local_req
submit_local_request—>添加req到sys->local_req_queue
|
|
V
local_req_handler—>处理本地消息
queue_request—>根据Op Type选择处理方式
queue_cluster_request—>调用cluster driver(zookeeper)来全局发送消息
sys->cdrv->block<—>zk_block
add_event—>type:EVENT_BLOCK
zk_queue_push
zk_create_seq_node—>添加zk事件,事件序号单调增加
|
|
|
V
zk_event_handler—>调用zk_event_handlers
zk_handle_block
sd_block_handler—>非本节点处理的消息直接返回,注册操作函数do_process_work和cluster_op_done
queue_work—>将req消息添加到sys->block_wqueue,唤醒工作线程
|
|
|
V
——-worker_routine—>工作线程回调函数,完成后添加到finished_list中
| work->fn(work)<—->do_process_work
| req->op->process_work(req)<—>cluster_new_vdi
| vdi_create—>获取可用vid,创建vdi
|
|——>worker_thread_request_done处理finished_list上的任务
work->done(work)<—->cluster_op_done
prepare_cluster_msg—>构建需要发送的消息
sys->cdrv->unblock<—->zk_unblock
add_event—>添加EVENT_UNBLOCK事件,发送构建的消息
|
|
|
V
zk_event_handler—>调用zk_event_handlers
zk_handle_unblock
sd_notify_handler—>本节点消息req需要put,非本节点消息进行main处理
do_process_main—>调用注册的main函数
op->process_main<—->post_cluster_new_vdi
atomic_set_bit(nr, sys->vdi_inuse)—>成功时将相应的位置位
欢迎使用CSDN-markdown编辑器
最新推荐文章于 2021-01-07 23:01:28 发布