]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix bad user stats on versioned bucket after reshard 33304/head
authorJ. Eric Ivancich <ivancich@redhat.com>
Tue, 4 Dec 2018 22:43:38 +0000 (17:43 -0500)
committerNathan Cutler <ncutler@suse.com>
Fri, 14 Feb 2020 10:04:44 +0000 (11:04 +0100)
User stats should only count bucket index entries that refer to actual
data. So only count entries with categories MAIN or MULTIMETA.

Note: the full solution is provided by the combination of the fixes in
PR 25333 (https://github.com/ceph/ceph/pull/25333) and these changes.

Signed-off-by: J. Eric Ivancich <ivancich@redhat.com>
(cherry picked from commit 8cd7ff99dd6cb7b3d63b80e09c8a2f229445e0a1)

src/rgw/rgw_rados.cc

index a806be7690cb3467078938f59512bdacc450233d..8f5a9458826f8062cf98056acd37fc81b7866e3b 100644 (file)
@@ -13908,7 +13908,8 @@ int RGWRados::cls_user_get_header_async(const string& user_id, RGWGetUserHeader_
   return 0;
 }
 
-int RGWRados::cls_user_sync_bucket_stats(rgw_raw_obj& user_obj, const RGWBucketInfo& bucket_info)
+int RGWRados::cls_user_sync_bucket_stats(rgw_raw_obj& user_obj,
+                                        const RGWBucketInfo& bucket_info)
 {
   vector<rgw_bucket_dir_header> headers;
   int r = cls_bucket_head(bucket_info, RGW_NO_SHARD, headers);
@@ -13923,10 +13924,13 @@ int RGWRados::cls_user_sync_bucket_stats(rgw_raw_obj& user_obj, const RGWBucketI
 
   for (const auto& hiter : headers) {
     for (const auto& iter : hiter.stats) {
-      const struct rgw_bucket_category_stats& header_stats = iter.second;
-      entry.size += header_stats.total_size;
-      entry.size_rounded += header_stats.total_size_rounded;
-      entry.count += header_stats.num_entries;
+      if (uint8_t(RGW_OBJ_CATEGORY_MAIN) == iter.first ||
+         uint8_t(RGW_OBJ_CATEGORY_MULTIMETA) == iter.first) {
+       const struct rgw_bucket_category_stats& header_stats = iter.second;
+       entry.size += header_stats.total_size;
+       entry.size_rounded += header_stats.total_size_rounded;
+       entry.count += header_stats.num_entries;
+      }
     }
   }