文档章节

RGW S3 GC解析

linuxhunter
 linuxhunter
发布于 2016/04/15 17:44
字数 540
阅读 350
收藏 0

RGW S3 GC类的主要功能是提供垃圾收集器的功能。用于异步删除对象。

一、RGW S3 GC核心类关系图

二、RGW S3 GC核心数据类关系图

三、RGW S3 GC主要处理函数解析。

1、RGWGC初始化操作。

RGWGC::initialize()

|__设置cct和store类对象

|__从配置文件中得到gc最大对象个数,即:rgw_gc_max_objs

|__根据gc最大对象个数生成obj_names数组且初始化该数组的内容为gc.0-rgw_gc_max_objs

2、RGWGC终止操作。

RGWGC::finalize()

|__删除obj_names数组

3、添加chain。

RGWGC::add_chain()

|__cls_rgw_gc_set_entry()

     |__rgw_cls_gc_set_entry()

          |__gc_update_entry()

               |__gc_omap_get()

                    |__cls_cxx_map_get_val()          以名字为key,得到Ceph集群中已经保存的cls_rgw_gc_obj_info信息(CEPH_OSD_OP_OMAPGETVALSBYKEYS)

               |__get_time_key()                         得到time key

               |__gc_omap_remove()

                    |__cls_cxx_map_remove_key()     删除指定time key的值(CEPH_OSD_OMAPRMKEYS)

               |__gc_omap_set()                        

                    |__cls_cxx_map_set_val()          以名字为key,设置cls_rgw_gc_obj_info信息到Ceph集群(CEPH_OSD_OP_OMAPSETVALS)

               |__get_time_key()                         得到time key

               |__gc_omap_set()                         以time为key,设置cls_rgw_gc_obj_info信息到Ceph集群(CEPH_OSD_OP_OMAPSETVALS)

4、发送chain。

RGWGC::send_chain()

|__RGWGC::add_chain()

|__RGWGC::tag_index()

|__RGWRados::gc_operate()

5、更新chain。

RGWGC::defer_chain()

|__cls_rgw_gc_defer_entry()

     |__rgw_cls_gc_defer_entry()

          |__gc_defer_entry()

               |__gc_omap_get()                    以名字为key,得到cls_rgw_gc_obj_info信息

               |__gc_update_entry()               以cls_rgw_gc_obj_info和更新的expiration_secs为参数,更新Ceph集群中的以名字和time为key的cls_rgw_gc_obj_info信息

|__RGWGC::tag_index()

|__RGWRados::gc_operate()

6、删除chain。

RGWGC::remove()

|__cls_rgw_gc_remove()

     |__rgw_cls_gc_remove()

          |__gc_remove()

               |__gc_omap_get()                    以名字为key,得到cls_rgw_gc_obj_info信息

               |__get_time_key()                    得到time key

               |__gc_omap_remove()               删除以time为key的cls_rgw_gc_obj_info信息

               |__gc_omap_remove()               删除以名字为key的cls_rgw_gc_obj_info信息

|__RGWRados::gc_operate()

7、列出chain。

RGWGC::list()

|__cls_rgw_gc_list()

     |__rgw_cls_gc_list()

          |__gc_list_entries()

               |__gc_iterate_entries()

                    |__prepend_index_prefix()          得到以time为key的key

                    |__cls_cxx_map_get_vals()          得到以time为key的所有cls_rgw_gc_obj_info信息

                    |__gc_record_decode()                解析得到cls_rgw_gc_obj_info信息

                    |__gc_list_cb()                              将得到的cls_rgw_gc_obj_info信息插入到列表中

8、处理chain。

RGWGC::process()

|__cls_rgw_gc_list()                                   得到obj_names[i]对应的所有cls_rgw_gc_obj_info信息

|__遍历cls_rgw_gc_obj_info信息中所有的cls_rgw_obj,调用cls_refcount_put()

     |__cls_rc_refcount_put()

          |__read_refcount()                         得到对象对应的引用计数

          |__obj_refcount::refs.erase()          减小对象的引用计数

          |__对于引用计数为零,则调用cls_cxx_remove()     从Ceph集群中删除对象(CEPH_OSD_OP_DELETE)

          |__对于引用计数非零,则调用set_refcount()           更新对象的引用计数

9、RGWGC处理线程主函数。

RGWGC::GCWorker::entry()

|__RGWGC::process()


© 著作权归作者所有

上一篇: RGW S3 Authorize解析
下一篇: RGW S3 User解析
linuxhunter
粉丝 71
博文 144
码字总数 93264
作品 0
沈阳
高级程序员
私信 提问
RGW S3 Multipart解析

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

linuxhunter
2016/04/13
255
1
RGW S3 Authorize解析

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

linuxhunter
2016/04/18
267
0
RGW S3 CORS解析

一、RGW S3 CORS核心类关系图。 二、RGW S3 CORS处理类关系图。 三、RGW S3 CORS操作解析。 1、PUT CORS操作。 RGWPutCORS::execute() |RGWPutCORSObjStoreS3::getparams() |从HTTP请求数据流...

linuxhunter
2016/04/14
184
0
RGW S3 ACL解析

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

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

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

linuxhunter
2016/04/07
529
1

没有更多内容

加载失败,请刷新页面

加载更多

spring mvc主流程源码阅读(剖析)

第一步,通过web.xml的配置可以知道,用户访问url第一次先走到DispatchServlet,(默认你学过基本的java的Servlet开发) <servlet><servlet-name>springServlet</servlet-name><serv......

小海bug
14分钟前
0
0
vmstat命令详解

https://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html

流光韶逝
48分钟前
1
0
如何理解算法时间复杂度的表示

先从O(1) 来说,理论上哈希表就是O(1)。因为哈希表是通过哈希函数来映射的,所以拿到一个关键 字,用哈希函数转换一下,就可以直接从表中取出对应的值。和现存数据有多少毫无关系,故而每次执...

yky20190625
今天
5
0
分布式架构 实现分布式锁的常见方式

一、我们为什么需要分布式锁? 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制...

太猪-YJ
今天
9
0
GitLab Docker 安装记录

安装环境 环境Centos7.4 64 1.拉取镜像文件 docker pull gitlab/gitlab-ce:latest 2.docker 安装 git.zddts.com 为访问域名或换成可以访问的IP docker run -d --hostname git.***.com -p ......

侠者圣
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部