RGW S3 User解析

1、RGW S3 User使用的類關係圖。數組

cls_user_header和cls_user_bucket_entry從用戶角度看到用戶所擁有的buckets信息,這兩個對象(其中cls_user_bucket_entry以數組的形式出現)須要保存在ceph集羣中。一般在建立/刪除/更新用戶buckets時都須要這兩個類對象。函數

RGwUserBuckets類是RGW User看到的buckets相關信息,實際上RGWBucketEnt和cls_user_bucket_entry類基本一致。ui

上圖表示的是bucket的類關係圖,其中rgw_bucket_dir_header和rgw_bucket_dir_entry這兩個對象(rgw_bucket_dir_entry以數組的形式出現)保存到ceph集羣中。在讀寫buckets時須要用到上述類。spa

上圖描述了RGW User類的主要類及其關係圖。其中核心類是RGWUser,該類表示一個RGW用戶。上述類中RGWUID和RGWUserInfo類須要保存到Ceph集羣。對象

2、RGW User主要函數處理流程。索引

一、同步指定用戶全部buckets的使用信息rem

rgw_user_sync_all_stats()               get

|__rgw_read_user_buckets()                    讀取指定用戶全部buckets信息並保存到RGWUserBuckets對象中同步

|__rgw_bucket_sync_user_stats()            同步指定用戶全部buckets的使用信息。其實是要更新cls_user_bucket_entry對象,更新結束後將cls_user_bukcet_entry對象寫入到ceph集羣email

|__RGWRados::complete_sysnc_user_stats()     對於未同步完成的操做完成其操做,最後同步更新cls_user_header對象並將該對象寫入到ceph集羣

二、寫指定用戶信息到ceph集羣

rgw_store_user_info()

|__檢查RGWUserInfo中的access_key是否有效(經過access_key獲取RGWUserInfo信息,以後比較獲取到的RGWUserInfo信息與參數傳進來的RGWUserInfo信息是否一致)

|__生成RGWUID對象且以RGWUserInfo.user_id進行初始化

|__以RGWUserInfo.user_id爲key,將RGWUID和RGWUserInfo信息寫入到user metadata pool中

|__以RGWUserInfo.user_email爲key,將RGWUID信息寫入到user email pool中

|__以RGWUserInfo::RGWAccessKey.id爲key,將RGWUID信息寫入到user keys pool中

三、經過用戶index信息讀取RGWUserInfo信息

rgw_get_user_info_from_index()

|__rgw_get_system_obj()          經過指定用戶的index獲得RGWUID對象

|__rgw_get_info_by_uid()          經過RGWUID.user_id信息獲得RGWUserInfo信息

|__更新RGW User Info Cache uinfo_cache

四、經過用戶uid信息讀取RGWUserInfo信息

rgw_get_user_info_by_uid()

|__rgw_get_system_obj()          以uid爲key,獲得RGWUID對象和RGWUserInfo對象(使用的pool是user uid pool)

五、經過用戶email信息讀取RGWUserInfo信息

rgw_get_user_info_by_email()

|__rgw_get_user_info_from_index()          以用戶的email爲key,獲得RGWUserInfo對象

六、經過用戶accesskey信息讀取RGWUserInfo信息

rgw_get_user_info_by_access_key()

|__rgw_get_user_info_from_index()          以用戶的access key爲key,獲得RGWUserInfo對象

七、經過用戶uid信息讀取用戶的屬性信息

rgw_get_user_attrs_by_uid()

|__RGWRados::SystemObject::Read.stat()

     |__RGWRados::stat_system_obj()

          |__RGWRados::get_system_obj_state()

               |__RGWRados::get_system_obj_state_impl()

                    |__RGWRados::raw_obj_stat()               讀取指定對象的屬性信息而且去掉以user.rgw.開頭的屬性值

八、刪除用戶access key索引

rgw_remove_key_index()

|__RGWRados::delete_system_obj()

九、刪除用戶uid索引

rgw_remove_uid_index()

|__rgw_get_user_info_by_uid()

|__RGWRados::meta_mgr::remove_entry()          刪除user的metadata信息

十、刪除用戶email索引

rgw_remove_email_index()

|__RGWRados::delete_system_obj()

十一、刪除用戶

rgw_delete_user()

|__rgw_read_user_buckets()          讀取指定用戶uid所擁有的bucket列表信息

|__rgw_remove_key_index()          刪除以access key爲索引的RGWUseInfo信息

|__RGWRados::delete_system_obj()     刪除以email爲索引的RGWUserInfo信息

|__RGWRados::delete_system_obj()     刪除uid.bucket對象

|__RGWRados::meta_mgr.remove_entry()     刪除用戶的元數據信息

相關文章
相關標籤/搜索