千家信息网

ceph中rgw bucket相关操作有哪些

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要介绍ceph中rgw bucket相关操作有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、list bucket。1、读取bucket信息处理流程。RGWL
千家信息网最后更新 2025年02月04日ceph中rgw bucket相关操作有哪些

这篇文章主要介绍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 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相关操作有哪些"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0