溫馨提示×

溫馨提示×

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

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

RGW S3 User的示例分析

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

這篇文章給大家分享的是有關(guān)RGW S3 User的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一、RGW S3 User使用的類關(guān)系圖。

RGW S3 User的示例分析

cls_user_header和cls_user_bucket_entry從用戶角度看到用戶所擁有的buckets信息,這兩個對象(其中cls_user_bucket_entry以數(shù)組的形式出現(xiàn))需要保存在ceph集群中。通常在創(chuàng)建/刪除/更新用戶buckets時都需要這兩個類對象。

RGW S3 User的示例分析

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

RGW S3 User的示例分析

上圖表示的是bucket的類關(guān)系圖,其中rgw_bucket_dir_header和rgw_bucket_dir_entry這兩個對象(rgw_bucket_dir_entry以數(shù)組的形式出現(xiàn))保存到ceph集群中。在讀寫buckets時需要用到上述類。

RGW S3 User的示例分析

上圖描述了RGW User類的主要類及其關(guān)系圖。其中核心類是RGWUser,該類表示一個RGW用戶。上述類中RGWUID和RGWUserInfo類需要保存到Ceph集群。

二、RGW User主要函數(shù)處理流程。

1、同步指定用戶所有buckets的使用信息

rgw_user_sync_all_stats()               

|__rgw_read_user_buckets()                    讀取指定用戶所有buckets信息并保存到RGWUserBuckets對象中

|__rgw_bucket_sync_user_stats()            同步指定用戶所有buckets的使用信息。實際上是要更新cls_user_bucket_entry對象,更新結(jié)束后將cls_user_bukcet_entry對象寫入到ceph集群

|__RGWRados::complete_sysnc_user_stats()     對于未同步完成的操作完成其操作,最后同步更新cls_user_header對象并將該對象寫入到ceph集群

2、寫指定用戶信息到ceph集群

rgw_store_user_info()

|__檢查RGWUserInfo中的access_key是否有效(通過access_key獲取RGWUserInfo信息,之后比較獲取到的RGWUserInfo信息與參數(shù)傳進來的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中

3、通過用戶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

4、通過用戶uid信息讀取RGWUserInfo信息

rgw_get_user_info_by_uid()

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

5、通過用戶email信息讀取RGWUserInfo信息

rgw_get_user_info_by_email()

|__rgw_get_user_info_from_index()          以用戶的email為key,得到RGWUserInfo對象

6、通過用戶accesskey信息讀取RGWUserInfo信息

rgw_get_user_info_by_access_key()

|__rgw_get_user_info_from_index()          以用戶的access key為key,得到RGWUserInfo對象

7、通過用戶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.開頭的屬性值

8、刪除用戶access key索引

rgw_remove_key_index()

|__RGWRados::delete_system_obj()

9、刪除用戶uid索引

rgw_remove_uid_index()

|__rgw_get_user_info_by_uid()

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

10、刪除用戶email索引

rgw_remove_email_index()

|__RGWRados::delete_system_obj()

11、刪除用戶

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()     刪除用戶的元數(shù)據(jù)信息

感謝各位的閱讀!關(guān)于“RGW S3 User的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(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)容。

rgw
AI