1、list bucket。数据结构
一、读取bucket信息处理流程。app
RGWListBucket::execute()函数
|__RGWRados::Bucket::List::list_objects()spa
|__RGWRados::cls_bucket_list()对象
|__RGWRados::open_bucket_index()rem
|__CLSRGWIssueBucketList::issue_op()get
|__issue_bucket_list_op()string
|__librados::IoCtxImpl::aio_operate()op is rgw.bucket_listit
|__cls_rgw.cc::rgw_bucket_list()io
|__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的对应关系
};
二、读取到的bucket信息返回给调用者。
RGWListBucket_ObjStore_S3::send_response()
拼接HTTP响应头而且将读取到的List信息RGWObjEnt放在Contents标签内返回给调用者;
2、stat bucket。
一、读取bucket stat信息处理流程。
RGWStatBucket::execute()
|__RGWRados::update_containers_stats()
|__RGWRados::cls_bucket_head()
|__遍历读取到的bucket head信息且从bucket head中更新count/size/size_rounded信息
二、读取到的bucket stat信息返回给调用者。
RGWStatBucket_ObjStore_S3::send_response()
3、create bucket。
一、建立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
二、建立bucket的返回处理函数。
RGWCreateBucket_ObjStore_S3::send_response()
4、delete bucket。
一、删除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信息
二、删除bucket的返回处理函数。
RGWDeleteBucket_ObjStore_S3::send_reponse()
5、bucket metadata。
一、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结构描述。
二、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结构描述。