您好,登錄后才能下訂單哦!
這篇文章主要介紹ceph中rgw bucket相關操作有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一、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信息轉換成RGWObjEnt結構
|__檢查讀取到的RGWObjEnt結構的合法性
實際保存到ceph集群中bucket信息的數據結構是struct rgw_bucket_dir,該結構內容如下:
Struct rgw_bucket_dir {
Struct rgw_bucket_dir_header header;保存bucket dir的頭部信息
std::map<string, struct rgw_bucket_dir_entry> m;保存bucket中文件或子bucket的名稱和entry的對應關系
};
2、讀取到的bucket信息返回給調用者。
RGWListBucket_ObjStore_S3::send_response()
拼接HTTP響應頭并且將讀取到的List信息RGWObjEnt放在Contents標簽內返回給調用者;
二、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信息返回給調用者。
RGWStatBucket_ObjStore_S3::send_response()
三、create bucket。
1、創建bucket的處理流程。
RGWCreateBucket::execute()
|__rgw_make_bucket_entry_name()創建bucket_entry_name=tenant_name + bucket_name
|__RGWRados::get_bucket_info()獲取指定用戶的bucket info信息
|__RGWRados::create_bucket()創建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()設置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()創建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結構
|__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結構
|__cls_cxx_map_write_header()更新bucket的header結構
|__RGWRados::put_bucket_entrypoint_info()
|__rgw_make_bucket_entry_name()
|__rgw_bucket_store_info()更新bucket metadata
2、創建bucket的返回處理函數。
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信息
|__統計用戶所有buckets的stats信息并保存到cls_user_bucket_entry結構中
|__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的返回處理函數。
RGWDeleteBucket_ObjStore_S3::send_reponse()
五、bucket metadata。
1、RGWBucketMetadataHandler。
該類負責bucket metadata的get/put/delete操作。bucket metadata核心數據結構是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類還負責遍歷bucket中所有對象名稱的方法:list_keys_init()/list_keys_next()/list_keys_complete()。其中bucket中所有對象名稱使用struct RGWObjEnt結構描述。
2、RGWBucketInstanceMetadataHandler。
該類負責bucket instance metadata的get/put/delete操作。在執行put操作更新bucket info時,首先獲取bucket location所在,之后根據得到的bucket location更新bucket info信息,最后調用RGWRados::init_bucket_index()函數來創建bucket的header信息。
RGWBucketMetadataHandler類還負責遍歷bucket中所有對象名稱的方法:list_keys_init()/list_keys_next()/list_keys_complete()。其中bucket中所有對象名稱使用struct RGWObjEnt結構描述。
以上是“ceph中rgw bucket相關操作有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。