您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)RGW S3 User的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
一、RGW S3 User使用的類關(guān)系圖。
cls_user_header和cls_user_bucket_entry從用戶角度看到用戶所擁有的buckets信息,這兩個對象(其中cls_user_bucket_entry以數(shù)組的形式出現(xiàn))需要保存在ceph集群中。通常在創(chuàng)建/刪除/更新用戶buckets時都需要這兩個類對象。
RGwUserBuckets類是RGW User看到的buckets相關(guān)信息,實際上RGWBucketEnt和cls_user_bucket_entry類基本一致。
上圖表示的是bucket的類關(guān)系圖,其中rgw_bucket_dir_header和rgw_bucket_dir_entry這兩個對象(rgw_bucket_dir_entry以數(shù)組的形式出現(xiàn))保存到ceph集群中。在讀寫buckets時需要用到上述類。
上圖描述了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é)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(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)容。