sheepdog创建vdi流程

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--->取出头结点的请求,在有unblock到来之前这个请求不从链表上摘除
                                sd_block_handler--->非本节点处理的消息直接返回,注册操作函数do_process_work和cluster_op_done,
                                                    设置cluster_op_running为true,保证阻塞的请求串行执行
                                    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处理,设置sd_notify_handler为false
                                    do_process_main--->调用注册的main函数
                                        op->process_main<---->post_cluster_new_vdi
                                            atomic_set_bit(nr, sys->vdi_inuse)--->成功时将相应的位置位
                                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值