rgw librados io

//初始化user quota 和bucket quota

op->init_processing()

//验证用户是否有对应的操作,

op->verify_op_mask();

//对应ACL权限的检测

op->verify_permission();

//验证请求的参数是否合法

op->verify_params();
RGWPutObjProcessor  RGWPutObjProcessor_Aio
                    1.RGWPutObjProcessor_Atomic 
                    2.RGWPutObjProcessor_Multipart(继承 RGWPutObjProcessor_Atomic)
RGWOP::execute()
put_data_and_throttle()
        RGWPutObjProcessor_Atomic::handle_data()
            RGWPutObjProcessor_Atomic::write_data()
                RGWPutObjProcessor_Aio::handle_obj_data()
                    RGWRados::aio_put_obj_data()
                        librados::ObjectWriteOperation()-->op(继承librados::ObjectOperation 实例化该对象)
                        librados::IoCtx::aio_operate(...op...)
                            IoCtxImpl::librados::IoCtxImpl::queue_aio_write()(把异步写op放入librados::IoCtxImpl::aio_write_list 列表中)
                            librados::IoCtxImpl::objecter->mutate()(objecter 是osdc/Objecter的实例,转变op(ObjectOP)-->op(Op (继承RefCountedObject)))
                                osdc/Objecter::op_submit(o)
                                    osdc/Objecter::_op_submit()
                                        osdc/Objecter::_calc_target()
                                        osdc/Objecter::_get_session()(OSDSession 是Objecter的内部结构,主要用于为Objecter构建session,在osd_sessions中保存)
                                        osdc/Objecter::_prepare_osd_op(op); //new a MOSDOp which will be used by osd
                                        osdc/Objecter::_session_op_assign(s, op) //assign op to session
                                        osdc/Objecter::_send_op()send the msg out with the connection incorporated in the OSDSession
                                            op->session->con.send_message()(由与session关联的PipeConnection::send_message(Message *m)发送消息)
                                                SimpleMessenger::send_message()
                                                    SimpleMessenger::_send_message(m, con)
                                                        SimpleMessenger::submit_message()
                                                            PipConnection::pipe->_send(m)()(将要发送的消息放入队列中map<int, list<Message*> > out_q)

        RGWPutObjProcessor_Atomic::throttle_data()



        Objecter 中有OSDsession MOSDOp
        SimpleMesseger为osdsession 提供pipconnection。(pip)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值