這篇文章給大家分享的是有關(guān)RGW S3 User的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
“只有客戶(hù)發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個(gè)不僅審美在線,而且實(shí)用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對(duì)網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無(wú)止境。
一、RGW S3 User使用的類(lèi)關(guān)系圖。
cls_user_header和cls_user_bucket_entry從用戶(hù)角度看到用戶(hù)所擁有的buckets信息,這兩個(gè)對(duì)象(其中cls_user_bucket_entry以數(shù)組的形式出現(xiàn))需要保存在ceph集群中。通常在創(chuàng)建/刪除/更新用戶(hù)buckets時(shí)都需要這兩個(gè)類(lèi)對(duì)象。
RGwUserBuckets類(lèi)是RGW User看到的buckets相關(guān)信息,實(shí)際上RGWBucketEnt和cls_user_bucket_entry類(lèi)基本一致。
上圖表示的是bucket的類(lèi)關(guān)系圖,其中rgw_bucket_dir_header和rgw_bucket_dir_entry這兩個(gè)對(duì)象(rgw_bucket_dir_entry以數(shù)組的形式出現(xiàn))保存到ceph集群中。在讀寫(xiě)buckets時(shí)需要用到上述類(lèi)。
上圖描述了RGW User類(lèi)的主要類(lèi)及其關(guān)系圖。其中核心類(lèi)是RGWUser,該類(lèi)表示一個(gè)RGW用戶(hù)。上述類(lèi)中RGWUID和RGWUserInfo類(lèi)需要保存到Ceph集群。
二、RGW User主要函數(shù)處理流程。
1、同步指定用戶(hù)所有buckets的使用信息
rgw_user_sync_all_stats()
|__rgw_read_user_buckets() 讀取指定用戶(hù)所有buckets信息并保存到RGWUserBuckets對(duì)象中
|__rgw_bucket_sync_user_stats() 同步指定用戶(hù)所有buckets的使用信息。實(shí)際上是要更新cls_user_bucket_entry對(duì)象,更新結(jié)束后將cls_user_bukcet_entry對(duì)象寫(xiě)入到ceph集群
|__RGWRados::complete_sysnc_user_stats() 對(duì)于未同步完成的操作完成其操作,最后同步更新cls_user_header對(duì)象并將該對(duì)象寫(xiě)入到ceph集群
2、寫(xiě)指定用戶(hù)信息到ceph集群
rgw_store_user_info()
|__檢查RGWUserInfo中的access_key是否有效(通過(guò)access_key獲取RGWUserInfo信息,之后比較獲取到的RGWUserInfo信息與參數(shù)傳進(jìn)來(lái)的RGWUserInfo信息是否一致)
|__生成RGWUID對(duì)象且以RGWUserInfo.user_id進(jìn)行初始化
|__以RGWUserInfo.user_id為key,將RGWUID和RGWUserInfo信息寫(xiě)入到user metadata pool中
|__以RGWUserInfo.user_email為key,將RGWUID信息寫(xiě)入到user email pool中
|__以RGWUserInfo::RGWAccessKey.id為key,將RGWUID信息寫(xiě)入到user keys pool中
3、通過(guò)用戶(hù)index信息讀取RGWUserInfo信息
rgw_get_user_info_from_index()
|__rgw_get_system_obj() 通過(guò)指定用戶(hù)的index得到RGWUID對(duì)象
|__rgw_get_info_by_uid() 通過(guò)RGWUID.user_id信息得到RGWUserInfo信息
|__更新RGW User Info Cache uinfo_cache
4、通過(guò)用戶(hù)uid信息讀取RGWUserInfo信息
rgw_get_user_info_by_uid()
|__rgw_get_system_obj() 以u(píng)id為key,得到RGWUID對(duì)象和RGWUserInfo對(duì)象(使用的pool是user uid pool)
5、通過(guò)用戶(hù)email信息讀取RGWUserInfo信息
rgw_get_user_info_by_email()
|__rgw_get_user_info_from_index() 以用戶(hù)的email為key,得到RGWUserInfo對(duì)象
6、通過(guò)用戶(hù)accesskey信息讀取RGWUserInfo信息
rgw_get_user_info_by_access_key()
|__rgw_get_user_info_from_index() 以用戶(hù)的access key為key,得到RGWUserInfo對(duì)象
7、通過(guò)用戶(hù)uid信息讀取用戶(hù)的屬性信息
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() 讀取指定對(duì)象的屬性信息并且去掉以u(píng)ser.rgw.開(kāi)頭的屬性值
8、刪除用戶(hù)access key索引
rgw_remove_key_index()
|__RGWRados::delete_system_obj()
9、刪除用戶(hù)uid索引
rgw_remove_uid_index()
|__rgw_get_user_info_by_uid()
|__RGWRados::meta_mgr::remove_entry() 刪除user的metadata信息
10、刪除用戶(hù)email索引
rgw_remove_email_index()
|__RGWRados::delete_system_obj()
11、刪除用戶(hù)
rgw_delete_user()
|__rgw_read_user_buckets() 讀取指定用戶(hù)uid所擁有的bucket列表信息
|__rgw_remove_key_index() 刪除以access key為索引的RGWUseInfo信息
|__RGWRados::delete_system_obj() 刪除以email為索引的RGWUserInfo信息
|__RGWRados::delete_system_obj() 刪除uid.bucket對(duì)象
|__RGWRados::meta_mgr.remove_entry() 刪除用戶(hù)的元數(shù)據(jù)信息
感謝各位的閱讀!關(guān)于“RGW S3 User的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!