RGW S3 GC解析

RGW S3 GC類的主要功能是提供垃圾收集器的功能。用於異步刪除對象。數組

1、RGW S3 GC核心類關係圖異步

2、RGW S3 GC核心數據類關係圖函數

3、RGW S3 GC主要處理函數解析。線程

一、RGWGC初始化操做。code

RGWGC::initialize()對象

|__設置cct和store類對象rem

|__從配置文件中獲得gc最大對象個數,即:rgw_gc_max_objsget

|__根據gc最大對象個數生成obj_names數組且初始化該數組的內容爲gc.0-rgw_gc_max_objsit

二、RGWGC終止操做。io

RGWGC::finalize()

|__刪除obj_names數組

三、添加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)

四、發送chain。

RGWGC::send_chain()

|__RGWGC::add_chain()

|__RGWGC::tag_index()

|__RGWRados::gc_operate()

五、更新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()

六、刪除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()

七、列出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信息插入到列表中

八、處理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()           更新對象的引用計數

九、RGWGC處理線程主函數。

RGWGC::GCWorker::entry()

|__RGWGC::process()

相關文章
相關標籤/搜索