From f0a8f527a9977afd7a180d21d339f271511920c0 Mon Sep 17 00:00:00 2001 From: Abhishek Lekshmanan Date: Fri, 5 Oct 2018 11:19:18 +0200 Subject: [PATCH] rgw: copy actual stats from the source shards during reshard Currently we don't copy the actual_stats field during reshard, which makes resharded buckets show a size_utilized as 0, which further has the problem that a subsequent object removal would subtract the object size from the 0 size utilized showing up large uint64_t values. Copy the size_actual from the source object in both cls and in reshard_process. This will fix the new buckets, existing buckets will still have to go through a bucket check --fix for their stats to be corrected. Fixes: http://tracker.ceph.com/issues/36290 Signed-off-by: Abhishek Lekshmanan (cherry picked from commit beb90638ae3d5329653b61bae0d6714796c41d04) --- src/cls/rgw/cls_rgw.cc | 1 + src/cls/rgw/cls_rgw_types.cc | 1 + src/rgw/rgw_reshard.cc | 1 + 3 files changed, 3 insertions(+) diff --git a/src/cls/rgw/cls_rgw.cc b/src/cls/rgw/cls_rgw.cc index aa415ce27596b..13b3e92dc9598 100644 --- a/src/cls/rgw/cls_rgw.cc +++ b/src/cls/rgw/cls_rgw.cc @@ -597,6 +597,7 @@ int rgw_bucket_update_stats(cls_method_context_t hctx, bufferlist *in, bufferlis dest.total_size += s.second.total_size; dest.total_size_rounded += s.second.total_size_rounded; dest.num_entries += s.second.num_entries; + dest.actual_size += s.second.actual_size; } } diff --git a/src/cls/rgw/cls_rgw_types.cc b/src/cls/rgw/cls_rgw_types.cc index 0d7b5d2181115..adfc1aa79874e 100644 --- a/src/cls/rgw/cls_rgw_types.cc +++ b/src/cls/rgw/cls_rgw_types.cc @@ -253,6 +253,7 @@ bool rgw_cls_bi_entry::get_info(cls_rgw_obj_key *key, uint8_t *category, rgw_buc accounted_stats->num_entries++; accounted_stats->total_size += entry.meta.accounted_size; accounted_stats->total_size_rounded += cls_rgw_get_rounded_size(entry.meta.accounted_size); + accounted_stats->actual_size += entry.meta.size; account = true; } break; diff --git a/src/rgw/rgw_reshard.cc b/src/rgw/rgw_reshard.cc index 4fe60b7ba3b9f..7b311116338d1 100644 --- a/src/rgw/rgw_reshard.cc +++ b/src/rgw/rgw_reshard.cc @@ -84,6 +84,7 @@ public: target.num_entries += entry_stats.num_entries; target.total_size += entry_stats.total_size; target.total_size_rounded += entry_stats.total_size_rounded; + target.actual_size += entry_stats.actual_size; } if (entries.size() >= RESHARD_SHARD_WINDOW) { int ret = flush(); -- 2.39.5