真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

RGWS3Multipart的示例分析

這篇文章主要介紹了RGW S3 Multipart的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

10年專注成都網(wǎng)站制作,成都企業(yè)網(wǎng)站建設(shè),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都企業(yè)網(wǎng)站建設(shè),高端網(wǎng)頁(yè)制作,對(duì)成都陽(yáng)光房等多個(gè)方面,擁有多年的網(wǎng)站制作經(jīng)驗(yàn)。

S3分段上傳技術(shù)主要應(yīng)用在大文件的數(shù)據(jù)上傳上,通常在S3客戶端會(huì)對(duì)上傳的大文件做一次分片操作。在RGW內(nèi)部還會(huì)對(duì)S3客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù)再進(jìn)行一次分片處理,RGW默認(rèn)分片大小是4MB。

1、初始化Multipart。

     初始化Multipart使用的是HTTP POST操作,在RGW中使用RGWInitMultipart_ObjStore_S3類處理。由于RGWInitMultipart_ObjStore_S3類繼承自RGWInitMultipart_ObjStore,而RGWInitMultipart_ObjStore類繼承自RGWInitMultipart,而RGWInitMultipart類繼承自RGWOp類。因此處理Mulipart初始化的操作主要集中在RGWInitMultipart::execute()函數(shù)中。下面對(duì)該函數(shù)的處理流程進(jìn)行詳細(xì)解析。

RGWInitMultipart::execute()

|__RGWInitMultipart_ObjStore_S3::get_params()     從HTTP請(qǐng)求中得到RGWAccessControlPolicy_S3類實(shí)例

|__將RGWAccessControlPolicy_S3放入到屬性列表中且屬性key=RGW_ATTR_ACL

|__rgw_get_request_metadata()          從HTTP請(qǐng)求中得到屬性信息且這些屬性信息的prefix key =user.rgw.

|__生成upload_id。upload_id = “2~” + 32個(gè)隨機(jī)字母數(shù)字

|__以對(duì)象名稱和upload_id為參數(shù),初始化RGWMPObj對(duì)象

|__以bucket、RGWMPObj.meta以及RGWMPObj.ns為參數(shù),初始化rgw_obj對(duì)象

|__創(chuàng)建RGWRados::Object對(duì)象

|__創(chuàng)建RGWRados::Object::Write對(duì)象

|__RGWRados::Object::Write::write_meta()

     |__創(chuàng)建ObjectWriteOperation對(duì)象

     |__將屬性attrs的key/value寫入到ObjectWriteOperation對(duì)象

     |__創(chuàng)建RGWRados::Bucket對(duì)象

     |__創(chuàng)建RGWRados::Bucket::UpdateIndex對(duì)象

     |__RGWRados::Bucket::UpdateIndex::prepare(CLS_RGW_OP_ADD)     準(zhǔn)備執(zhí)行更新object所在bucket的header信息以及dir_entry信息

          |__RGWRados::cls_obj_prepare_op()

               |__cls_rgw_bucket_prepare_op()

                    |__rgw_bucket_prepare_op()

                         |__read_key_entry()),對(duì)于不存在的entry則創(chuàng)建rgw_bucket_dir_entry類實(shí)例

                         |__read_bucket_header()          讀取rgw_bucket_dir_header

                         |__cls_cxx_map_set_val()          將rgw_bucket_dir_entry寫入ceph集群

                         |__write_bucket_header()          將更新的rgw_bucket_dir_header信息寫入ceph集群

     |__RGWRados::IoCtx::operate()          執(zhí)行object的attrs寫入ceph集群的操作

     |__RGWRados::Bucket::UpdateIndex::complete()          

          |__RGWRados::cls_obj_complete_add()

               |__RGWRados::cls_obj_complete_op()

                    |__cls_rgw_bucket_complete_op()

                         |__rgw_bucket_complete_op()

                              |__read_bucket_header()     讀取rgw_bucket_dir_header

                              |__read_key_entry(),對(duì)于不存在的entry則創(chuàng)建rgw_bucket_dir_entry類實(shí)例

                              |__cls_cxx_map_set_val()     將rgw_bucket_dir_entry寫入ceph集群

                              |__write_bucket_header()     將更新的rgw_bucket_dir_header信息寫入ceph集群

2、上傳Multipart數(shù)據(jù)。

     上傳Multipart數(shù)據(jù)使用的是HTTP PUT操作,在RGW中使用RGWPutObj_ObjStore_S3類處理。由于RGWPutObj_ObjStore_S3類繼承自RGWPutObj_ObjStore,而RGWPutObj_ObjStore類繼承自RGWPutObj,而RGWPutObj類繼承自RGWOp類。因此處理Mulipart初始化的操作主要集中在RGWPutObj::execute()函數(shù)中。在該函數(shù)中處理Multipart部分的操作主要由RGWPutObjProcessor_Multipart類負(fù)責(zé)處理。在該類中有兩個(gè)主要的處理函數(shù)prepare()和do_complete()。下面分別解析這兩個(gè)函數(shù)的處理流程。

RGWPutObjProcessor_Multipart::prepare()

|__從HTTP請(qǐng)求流中得到uploadId和partNumber信息

|__設(shè)置manifest.prefix為oid+”.”+uploadId

|__RGWObjManifest::set_multipart_part_rule()

|__RGWObjManifest::generator::create_begin()

     |__RGWObjManifest::get_implicit_location()     得到Multipart數(shù)據(jù)的命名及其位置

     |__RGWObjManifest::update_iterators()

RGWPutObjProcessor_Multipart::do_complete()

|__創(chuàng)建RGWRados::Object對(duì)象

|__創(chuàng)建RGWRados::Object::Write對(duì)象

|__RGWRados::Object::Write::write_meta()

|__RGWRados::omap_set()               更新multipart_meta_obj對(duì)象的omap信息

3、完成Multipart數(shù)據(jù)上傳。

     完成Multipart使用的是HTTP POST操作,在RGW中使用RGWCompleteMultipart_ObjStore_S3類處理。由于RGWCompleteMultipart_ObjStore_S3類繼承自RGWCompleteMultipart_ObjStore,而RGWCompleteMultipart_ObjStore類繼承自RGWCompleteMultipart,而RGWCompleteMultipart類繼承自RGWOp類。因此處理Mulipart完成的操作主要集中在RGWCompleteMultipart::execute()函數(shù)中。下面對(duì)該函數(shù)的處理流程進(jìn)行詳細(xì)解析。

RGWCompleteMultipart::execute()

|__get_obj_attrs()                    得到Multipart對(duì)象的屬性值

|__list_multipart_parts()          遍歷Multipart對(duì)象所有分片

|__解析所有分片且將分片的manifest信息寫入到Multipart對(duì)象的manifest列表中

|__創(chuàng)建RGWRados::Object對(duì)象

|__創(chuàng)建RGWRados::Object::Write對(duì)象

|__RGWRados::Object::Write::write_meta()          將屬性值寫入到Ceph集群

|__RGWRados::delete_obj()                     刪除meta_obj對(duì)象(該對(duì)象負(fù)責(zé)保存分片上傳過(guò)程中的對(duì)象信息)

4、終止Multipart數(shù)據(jù)上傳。

     終止Multipart使用的是HTTP DELETE操作,在RGW中使用RGWAbortMultipart_ObjStore_S3類處理。由于RGWAbortMultipart_ObjStore_S3類繼承自RGWAbortMultipart_ObjStore,而RGWAbortMultipart_ObjStore類繼承自RGWAbortMultipart,而RGWAbortMultipart類繼承自RGWOp類。因此處理Mulipart終止操作主要集中在RGWAbortMultipart::execute()函數(shù)中。下面對(duì)該函數(shù)的處理流程進(jìn)行詳細(xì)解析。

RGWAbortMultipart::execute()

|__get_multipart_info()                              得到meta_oid對(duì)象的屬性值

|__list_multipart_parts()                             遍歷Multipart對(duì)象所有分片

|__RGWRados::update_gc_chain()           將已經(jīng)完成的Multipart分片放入到GC隊(duì)列中等待GC線程做回收操作

|__RGWRados::send_chain_to_gc()          啟動(dòng)GC線程

|__創(chuàng)建RGWRados::Object對(duì)象

|__創(chuàng)建RGWRados::Object::Delete對(duì)象

|__RGWRados::Object::Delete::delete_obj()     刪除meta_oid對(duì)象

5、查看Multipart數(shù)據(jù)。

     查看Multipart使用的是HTTP GET操作,在RGW中使用RGWListMultipart_ObjStore_S3類處理。由于RGWListMultipart_ObjStore_S3類繼承自RGWListMultipart_ObjStore,而RGWListMultipart_ObjStore類繼承自RGWListMultipart,而RGWListMultipart類繼承自RGWOp類。因此處理Mulipart終止操作主要集中在RGWListMultipart::execute()函數(shù)中。下面對(duì)該函數(shù)的處理流程進(jìn)行詳細(xì)解析。

RGWListMultipart::execute()

|__get_multipart_info()                              得到meta_oid對(duì)象的屬性值

|__list_multipart_parts()                             遍歷Multipart對(duì)象所有分片

下面是RGW S3 Multipart的類關(guān)系圖

RGW S3 Multipart的示例分析

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“RGW S3 Multipart的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!


新聞名稱:RGWS3Multipart的示例分析
網(wǎng)站網(wǎng)址:http://weahome.cn/article/iesohd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部