文档章节

RGW S3 User解析

linuxhunter
 linuxhunter
发布于 2016/04/15 14:15
字数 791
阅读 407
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

一、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类基本一致。

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

上图描述了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 GC解析
下一篇: RGW S3 CORS解析
linuxhunter
粉丝 72
博文 144
码字总数 93264
作品 0
沈阳
高级程序员
私信 提问
RGW S3 Authorize解析

截止到目前为止,RGW S3的认证部分支持AWS v4认证、AWS v2认证以及匿名用户认证。这三种认证的总入口位于rgwprocess.cc::processrequest()函数,该函数中处理认证部分的代码如下: rgwproce...

linuxhunter
2016/04/18
478
0
rgw bucket相关操作解析

一、list bucket。 1、读取bucket信息处理流程。 RGWListBucket::execute() |RGWRados::Bucket::List::listobjects() |RGWRados::clsbucketlist() |RGWRados::openbucketindex() |CLSRGWIss......

linuxhunter
2016/04/11
1K
0
RGW S3 ACL解析

RGW ACL主要类关系图如下图所示: RGW ACL处理类关系图如下图所示: RGW ACL主要处理流程详细说明如下。 一、PUT ACL。 RGWPutACL::execute() |从HTTP请求数据流中解析出RGWAccessControlPol...

linuxhunter
2016/04/14
211
0
RadosGW框架分析

RadosGW分析。 一、RadosGW的main()函数解析。 RadosGW的main()函数位于rgwmain.cc中,该函数是RadosGW的入口函数。这里主要解析和RadosGW相关的内容,尽量省略WebServer的内容。 main()函数...

linuxhunter
2016/04/07
906
1
RGW S3 Multipart解析

S3分段上传技术主要应用在大文件的数据上传上,通常在S3客户端会对上传的大文件做一次分片操作。在RGW内部还会对S3客户端发送过来的数据再进行一次分片处理,RGW默认分片大小是4MB。下面就M...

linuxhunter
2016/04/13
664
1

没有更多内容

加载失败,请刷新页面

加载更多

006-ELK的二进制安装

二进制安装ELKstack 本次搭建属于单点,在同一台机器上进行安装 基础组件部署 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yu...

伟大源于勇敢的开始
今天
5
0
OSChina 周四乱弹 —— 浙江台的电话号码倒是记得挺牢

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Out On The Streets》 一直不理解北欧人对重金属和死亡摇滚的热情,听完这首歌好像理解了。#今日歌曲推荐# 《Out On The Stre...

小小编辑
今天
14
0
Leetcode PHP题解--D121 21. Merge Two Sorted Lists

D121 21. Merge Two Sorted Lists 题目链接 21. Merge Two Sorted Lists 题目分析 合并两个有序链表。 思路 逐个遍历两个链表,把小的数字塞入数组里。之后再拼起来。 最终代码 <?php/** *...

skys215
今天
6
0
mars-config 动态配置管理

mars-config 码云地址:https://gitee.com/fashionbrot/mars-config 介绍 spring mvc 、springboot 动态配置系统。http 轮训方式 更新 动态配置 软件架构 软件架构说明 后端使用技术 :sprin...

fashionbrot
今天
16
0
女朋友玩吃鸡手游被开挂老哥骗炮,我见义勇为将骗子绳之以法

大家好,我是乔哥。 晚上10点以后下班后我回到自如出租房里面,开始处理公众号粉丝发来的消息,一条一条处理,突然看到了这么几条消息,吸引了我的眼球: 然后我就和这位女粉丝小红(化名)聊...

gzc426
今天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部