rgw

RGW S3 Multipart解析

偶尔善良 提交于 2019-12-02 18:48:52
S3分段上传技术主要应用在大文件的数据上传上,通常在S3客户端会对上传的大文件做一次分片操作。在RGW内部还会对S3客户端发送过来的数据再进行一次分片处理,RGW默认分片大小是4MB。下面就Multipart不同部分进行详细解析。 1、初始化Multipart。 初始化Multipart使用的是HTTP POST操作,在RGW中使用RGWInitMultipart_ObjStore_S3类处理。由于RGWInitMultipart_ObjStore_S3类继承自RGWInitMultipart_ObjStore,而RGWInitMultipart_ObjStore类继承自RGWInitMultipart,而RGWInitMultipart类继承自RGWOp类。因此处理Mulipart初始化的操作主要集中在RGWInitMultipart::execute()函数中。下面对该函数的处理流程进行详细解析。 RGWInitMultipart::execute() |__RGWInitMultipart_ObjStore_S3::get_params() 从HTTP请求中得到RGWAccessControlPolicy_S3类实例 |__将RGWAccessControlPolicy_S3放入到属性列表中且属性key=RGW_ATTR_ACL |__rgw_get_request

rgw object read and write

末鹿安然 提交于 2019-12-02 18:48:41
一、Get Object。 1、读取Object的主要处理流程。 RGWGetObj::execute() |__创建RGWGetObj_CB类实例,其中handle_data()函数为回调函数,该函数会调用RGWGetObj::get_data_cb()函数,而该函数最终会调用send_reponse_data() |__创建RGWRados::Object类实例 |__创建RGWRados::Object::Read类实例 |__get_params() 从HTTP请求字符串中读取range_str/if_mod/if_unmod/if_match/if_nomatch信息 |__init_common() 解析range_str/if_mod/if_unmod内容 |__RGWRados::Object::Read::prepare() |__RGWRados::get_state() |__RGWRados::get_obj_state() |__RGWRados::get_obj_state_impl() |__RGWObjectCtx::get_state() |__RGWRados::raw_obj_stat() |__检查attrset中是否包含RGW_ATTR_SHADOW_OBJ属性并将属性值写入到RGWObjState::shadow_obj中 |_