RGW Usage类解析

一、概述。

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

二、核心数据结构解析。

RGW Usage核心数据结构如下:

struct rgw_usage_log_entry {

     rgw_user owner;

     rgw_user payer;

     string bucket;

     uint64_t epoch;

     rgw_usage_data total_usage;

     map<string, rgw_usage_data> usage_map;

};

三、核心类关系图。

RGW Usage类解析_第1张图片

四、核心处理函数解析。

1、获取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中

2、删除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

3、增加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

               


你可能感兴趣的:(ceph,usage,rgw)