Ceph IO流程分段上传(1)——InitMultipart
1 引言
Ceph是一个分布式对象存储,其代码经历十多年的发展也是愈见复杂,其IO也是从客户端到存储网关,经历PG到达底层的OSD,其中也是经历相当长的链路。在整理IO链路的过程中也是尝试多种方式,效果始终不令自己满意,经常追查某个调用栈到最底层之后忘了之前追查的函数,整理的文档逻辑也不甚清晰,于是思考过后决定使用整理调用栈的方式,并且在重点函数的地方链接到其他文档进行讲解,尽量保证主线逻辑的清晰,如果有继承关系或者重写的函数也会尽量标明。
=>表示函数返回值
->表示继承关系
|–表示调用栈,缩进表示被调用的关系,同一列的函数在同一个函数被调用
2 init multipart
RGWCivetWebFrontend::process()
|–process_request()
|\quad|–RGWREST::get_handler()
|\quad|\quad|–RGWRESTMgr::get_manager() => RGWRESTMgr_S3
|\quad|\quad|–RGWRESTMgr_S3::get_handler() => RGWHandler_REST_Obj_S3 -> RGWHandler_REST_S3 -> RGWHandler_REST
|\quad|–RGWHandler_REST::get_op()
|\quad|\quad|–RGWHandler_REST_Obj_S3::op_post() => RGWInitMultipart_ObjStore_S3 -> RGWInitMultipart_ObjStore -> RGWInitMultipart
|\quad|–RGWInitMultipart::get_type() => RGW_OP_INIT_MULTIPART
|\quad|–rgw_process_authenticated()
|\quad|\quad|–RGWInitMultipart::pre_exec()
|\quad|\quad|–RGWInitMultipart::execute()
|\quad|\quad|\quad|–RGWRados::Object::Write::write_meta()
|\quad|\quad|\quad|\quad|–RGWRados::Object::Write::_do_write_meta()
下一节将介绍分块上传对象multipart-upload接口。