RGW Usage类解析

1、概述。数据结构

     RGW Usage类实现了RGW的流量统计功能,其中包括发送/接收的字节数、执行操做的个数以及成功之行操做的个数。Usage类统计的这些内容对于通常的流量统计来讲已经够用了。函数

2、核心数据结构解析。ui

RGW Usage核心数据结构以下:code

struct rgw_usage_log_entry {对象

     rgw_user owner;rem

     rgw_user payer;get

     string bucket;string

     uint64_t epoch;it

     rgw_usage_data total_usage;map

     map<string, rgw_usage_data> usage_map;

};

3、核心类关系图。

4、核心处理函数解析。

一、获取RGWUsage信息。

RGWUsage::show()

|__RGWRados::read_usage()

     |__RGWRados::cls_obj_usage_log_read()

          |__cls_rgw_usage_log_read()

               |__rgw_user_usage_log_read()

                    |__usage_iterate_range()

                         |__cls_cxx_map_get_vals()          CEPH_OSD_OP_OMAPGETVALS

                         |__usage_record_decode()          从bufferlist中解析出rgw_usage_log_entry对象

                         |__usage_log_read_cb()

                              |__经过rgw_usage_log_entry::owner和rgw_usage_log_entry::bucket建立rgw_user_bucket对象

                              |__以rgw_user_bucket对象为key,rgw_usage_log_entry为value写入到map中

二、删除RGWUsage信息。

RGWUsage::trim()

|__RGWRados::trim_usage()

     |__RGWRados::cls_obj_usage_log_trim()

          |__cls_rgw_usage_log_trim()

               |__rgw_user_usage_log_trim()

                    |__usage_iterate_range()

                         |__cls_cxx_map_get_vals()          CEPH_OSD_OP_OMAPGETVALS

                         |__usage_record_decode()          从bufferlist中解析出rgw_usage_log_entry对象

                         |__usage_log_trim_cb()               

                              |__usage_record_name_by_time()          格式:epoch_user_bucket

                              |__usage_record_name_by_user()          格式:user_epoch_bucket

                              |__cls_cxx_map_remove_key()     CEPH_OSD_OP_OMAPRMKEYS

                              |__cls_cxx_map_remove_key()     CEPH_OSD_OP_OMAPRMKEYS

三、增长RGWUsage信息。

能够经过flush()函数或经过rgw_log_op()函数来增长RGWUsage信息,增长RGWUsage信息的入口代码位于RGWRados::log_usage()。下面详细描述该函数的处理流程。

RGWRados::log_usage()

|__RGWRados::cls_obj_usage_log_add()

     |__cls_rgw_usage_log_add()

          |__rgw_user_usage_log_add()

               |__usage_record_name_by_time()                         格式:epoch_user_bucket

               |__cls_cxx_map_set_val()                                      CEPH_OSD_OP_OMAPSETVALS

               |__usage_record_name_by_user()                         格式:user_epoch_bucket

               |__cls_cxx_map_set_val()                                      CEPH_OSD_OP_OMAPSETVALS

相关文章
相关标签/搜索