溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ceph中rgw bucket相關(guān)操作有哪些

發(fā)布時間:2021-12-18 16:44:49 來源:億速云 閱讀:795 作者:小新 欄目:云計算

這篇文章主要介紹ceph中rgw bucket相關(guān)操作有哪些,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、list bucket。

1、讀取bucket信息處理流程。

RGWListBucket::execute()

|__RGWRados::Bucket::List::list_objects()

    |__RGWRados::cls_bucket_list()

|__RGWRados::open_bucket_index()

|__CLSRGWIssueBucketList::issue_op()

    |__issue_bucket_list_op()

         |__librados::IoCtxImpl::aio_operate()op is rgw.bucket_list

              |__cls_rgw.cc::rgw_bucket_list()

        |__cls_rgw.cc::read_bucket_header()讀取struct rgw_bucket_dir的header信息

        |__cls_rgw.cc::get_obj_vals()讀取struct rgw_bucket_dir的entry信息

|__將讀取到的struct rgw_bucket_dir信息轉(zhuǎn)換成RGWObjEnt結(jié)構(gòu)

    |__檢查讀取到的RGWObjEnt結(jié)構(gòu)的合法性

實際保存到ceph集群中bucket信息的數(shù)據(jù)結(jié)構(gòu)是struct rgw_bucket_dir,該結(jié)構(gòu)內(nèi)容如下:

Struct rgw_bucket_dir {

Struct rgw_bucket_dir_header header;保存bucket dir的頭部信息

std::map<string, struct rgw_bucket_dir_entry> m;保存bucket中文件或子bucket的名稱和entry的對應(yīng)關(guān)系

};

ceph中rgw bucket相關(guān)操作有哪些

2、讀取到的bucket信息返回給調(diào)用者。

RGWListBucket_ObjStore_S3::send_response()

拼接HTTP響應(yīng)頭并且將讀取到的List信息RGWObjEnt放在Contents標(biāo)簽內(nèi)返回給調(diào)用者;

二、stat bucket。

1、讀取bucket stat信息處理流程。

RGWStatBucket::execute()

|__RGWRados::update_containers_stats()

    |__RGWRados::cls_bucket_head()

    |__遍歷讀取到的bucket head信息且從bucket head中更新count/size/size_rounded信息

2、讀取到的bucket stat信息返回給調(diào)用者。

RGWStatBucket_ObjStore_S3::send_response()

三、create bucket。

1、創(chuàng)建bucket的處理流程。

RGWCreateBucket::execute()

|__rgw_make_bucket_entry_name()創(chuàng)建bucket_entry_name=tenant_name + bucket_name

|__RGWRados::get_bucket_info()獲取指定用戶的bucket info信息

|__RGWRados::create_bucket()創(chuàng)建bucket

    |__RGWRados::select_bucket_placement()確定bucket.data_pool和bucket.index_pool名稱

    |__RGWRados::init_bucket_index()

|__CLSRGWIssueBucketIndexInit::issue_op()

    |__issue_bucket_index_init_op()

|__rgw_bucket_init_index()

    |__write_bucket_header()

|__cls_cxx_map_write_header()設(shè)置bucket的header信息

    |__RGWRados::put_linked_bucket_info()

|__RGWRados::put_bucket_instance_info()

    |__get_bucket_instance_entry()

    |__rgw_bucket_instance_store_info()更新bucket instance信息

|__RGWRados::put_bucket_entrypoint_info()

    |__rgw_make_bucket_entry_name()

    |__rgw_bucket_store_info()更新bucket metadata信息

|__rgw_link_bucket()創(chuàng)建bucket的鏈接

    |__rgw_get_bucket_obj()

    |__RGWRados::cls_user_add_bucket()

|__RGWRados::cls_user_update_buckets()

    |__cls_user_set_buckets()

|__cls_user.cc::cls_user_set_buckets_info()

    |__read_header()讀取bucket的header結(jié)構(gòu)

    |__get_key_by_bucket_name()

    |__get_existing_bucket_entry()讀取bucket中指定的entry

    |__apply_entry_stats()更新entry的stats

    |__write_entry()重新寫bucket中指定的entry

    |__add_header_stats() 更新bucket的header的stat結(jié)構(gòu)

    |__cls_cxx_map_write_header()更新bucket的header結(jié)構(gòu)

    |__RGWRados::put_bucket_entrypoint_info()

|__rgw_make_bucket_entry_name()

|__rgw_bucket_store_info()更新bucket metadata

2、創(chuàng)建bucket的返回處理函數(shù)。

RGWCreateBucket_ObjStore_S3::send_response()

四、delete bucket。

1、刪除bucket的處理流程。

RGWDeleteBucket::execute()

|__rgw_bucket_sync_user_stats()

    |__rgw_get_buckets_obj()

    |__RGWRados::cls_user_sync_bucket_stats()

|__cls_bucket_head()讀取bucket的header信息

|__統(tǒng)計用戶所有buckets的stats信息并保存到cls_user_bucket_entry結(jié)構(gòu)中

|__RGWRados::cls_user_update_buckets()

    |__cls_user_set_buckets()

    |__cls_user_set_buckets_info()更新bucket header和entry信息

|__RGWRados::delete_bucket()

    |__rgw_bucket_delete_bucket_obj()

|__librados::meta_mgr->remove_entry()刪除bucket metadata信息

    |__rgw_bucket_instance_remove_entry()

|__librados::meta_mgr->remove_entry()刪除bucket instance metadata信息

|__rgw_unlink_bucket()

    |__RGWRados::cls_user_remove_bucket()

|__cls_user_remove_bucket()

|__cls_user_remove_bucket()

    |__read_header()

    |__get_key_by_bucket_name()

    |__get_existing_bucket_entry()

    |__remove_entry()

|__cls_cxx_map_remove_key()

    |__RGWRados::get_bucket_entrypoint_info()

    |__RGWRados::put_bucket_entrypoint_info()

|__rgw_make_bucket_entry_name()

|__rgw_bucket_store_info()更新bucket metadata信息

2、刪除bucket的返回處理函數(shù)。

RGWDeleteBucket_ObjStore_S3::send_reponse()

五、bucket metadata。

1、RGWBucketMetadataHandler。

該類負(fù)責(zé)bucket metadata的get/put/delete操作。bucket metadata核心數(shù)據(jù)結(jié)構(gòu)是struct RGWBucketEntryPoint。

Struct RGWBucketEntryPoint {

Rgw_bucket bucket;

Rgw_user owner;

Ceph::real_time creation_time;

Bool linked;

Bool has_bucket_info;

RGWBucketInfo old_bucket_info;

};

RGWBucketMetadataHandler類還負(fù)責(zé)遍歷bucket中所有對象名稱的方法:list_keys_init()/list_keys_next()/list_keys_complete()。其中bucket中所有對象名稱使用struct RGWObjEnt結(jié)構(gòu)描述。

2、RGWBucketInstanceMetadataHandler。

該類負(fù)責(zé)bucket instance metadata的get/put/delete操作。在執(zhí)行put操作更新bucket info時,首先獲取bucket location所在,之后根據(jù)得到的bucket location更新bucket info信息,最后調(diào)用RGWRados::init_bucket_index()函數(shù)來創(chuàng)建bucket的header信息。

RGWBucketMetadataHandler類還負(fù)責(zé)遍歷bucket中所有對象名稱的方法:list_keys_init()/list_keys_next()/list_keys_complete()。其中bucket中所有對象名稱使用struct RGWObjEnt結(jié)構(gòu)描述。

ceph中rgw bucket相關(guān)操作有哪些

以上是“ceph中rgw bucket相關(guān)操作有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI