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接口。