原链接
http://blog.csdn.net/litianze99/article/details/51489517
//初始化user quota 和bucket quota
op->init_processing()
- 1
- 1
//验证用户是否有对应的操作,
op->verify_op_mask();
- 1
- 1
//对应ACL权限的检测
op->verify_permission();
- 1
- 1
//验证请求的参数是否合法
op->verify_params();
- 1
- 1
RGWPutObjProcessor RGWPutObjProcessor_Aio
1.RGWPutObjProcessor_Atomic
2.RGWPutObjProcessor_Multipart(继承 RGWPutObjProcessor_Atomic)
- 1
- 2
- 3
- 1
- 2
- 3
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)