RGWS3User的示例分析

这篇文章给大家分享的是有关RGW S3 User的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

“只有客户发展了,才有我们的生存与发展!”这是创新互联的服务宗旨!把网站当作互联网产品,产品思维更注重全局思维、需求分析和迭代思维,在网站建设中就是为了建设一个不仅审美在线,而且实用性极高的网站。创新互联对网站设计制作、成都网站制作、网站制作、网站开发、网页设计、网站优化、网络推广、探索永无止境。

一、RGW S3 User使用的类关系图。

RGW S3 User的示例分析

cls_user_header和cls_user_bucket_entry从用户角度看到用户所拥有的buckets信息,这两个对象(其中cls_user_bucket_entry以数组的形式出现)需要保存在ceph集群中。通常在创建/删除/更新用户buckets时都需要这两个类对象。

RGW S3 User的示例分析

RGwUserBuckets类是RGW User看到的buckets相关信息,实际上RGWBucketEnt和cls_user_bucket_entry类基本一致。

RGW S3 User的示例分析

上图表示的是bucket的类关系图,其中rgw_bucket_dir_header和rgw_bucket_dir_entry这两个对象(rgw_bucket_dir_entry以数组的形式出现)保存到ceph集群中。在读写buckets时需要用到上述类。

RGW S3 User的示例分析

上图描述了RGW User类的主要类及其关系图。其中核心类是RGWUser,该类表示一个RGW用户。上述类中RGWUID和RGWUserInfo类需要保存到Ceph集群。

二、RGW User主要函数处理流程。

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

rgw_user_sync_all_stats()               

|__rgw_read_user_buckets()                    读取指定用户所有buckets信息并保存到RGWUserBuckets对象中

|__rgw_bucket_sync_user_stats()            同步指定用户所有buckets的使用信息。实际上是要更新cls_user_bucket_entry对象,更新结束后将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信息与参数传进来的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()     删除用户的元数据信息

感谢各位的阅读!关于“RGW S3 User的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


新闻名称:RGWS3User的示例分析
分享链接:http://pwwzsj.com/article/gsdppi.html