]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: during "bucket check --fix" set index entry pool id correctly
authorJ. Eric Ivancich <ivancich@redhat.com>
Mon, 11 Oct 2021 20:17:46 +0000 (16:17 -0400)
committerJ. Eric Ivancich <ivancich@redhat.com>
Wed, 20 Oct 2021 17:00:40 +0000 (13:00 -0400)
The current code sets the pool id of bucket index entries to the
bucket index pool rather than the data pool. This fixes that.

Signed-off-by: J. Eric Ivancich <ivancich@redhat.com>
src/rgw/rgw_rados.cc

index c2aa85f46f7541992365f13b29d2126b6b2edee1..5d609e69a449299e7e1b9506a5eb334fbdf21055 100644 (file)
@@ -9005,6 +9005,7 @@ int RGWRados::check_disk_state(const DoutPrefixProvider *dpp,
        * non-bad ways this could happen (there probably are, but annoying
        * to handle!) */
     }
+
     // encode a suggested removal of that key
     list_state.ver.epoch = io_ctx.get_last_version();
     list_state.ver.pool = io_ctx.get_id();
@@ -9060,8 +9061,7 @@ int RGWRados::check_disk_state(const DoutPrefixProvider *dpp,
   object.meta.owner_display_name = owner.get_display_name();
 
   // encode suggested updates
-  list_state.ver.pool = io_ctx.get_id();
-  list_state.ver.epoch = astate->epoch;
+
   list_state.meta.size = object.meta.size;
   list_state.meta.accounted_size = object.meta.accounted_size;
   list_state.meta.mtime = object.meta.mtime;
@@ -9069,6 +9069,18 @@ int RGWRados::check_disk_state(const DoutPrefixProvider *dpp,
   list_state.meta.etag = etag;
   list_state.meta.content_type = content_type;
 
+  librados::IoCtx head_obj_ctx; // initialize to data pool so we can get pool id
+  const bool head_pool_found =
+    get_obj_head_ioctx(dpp, bucket_info, obj, &head_obj_ctx);
+  if (head_pool_found) {
+    list_state.ver.pool = head_obj_ctx.get_id();
+    list_state.ver.epoch = astate->epoch;
+  } else {
+    ldpp_dout(dpp, 0) << __PRETTY_FUNCTION__ <<
+      " WARNING: unable to find head object data pool for \"" <<
+      obj << "\", not updating version pool/epoch" << dendl;
+  }
+
   if (astate->obj_tag.length() > 0) {
     list_state.tag = astate->obj_tag.c_str();
   }