From 526da161a5d509056a02c832731e3a792c58d3c9 Mon Sep 17 00:00:00 2001 From: "J. Eric Ivancich" Date: Mon, 11 Oct 2021 16:17:46 -0400 Subject: [PATCH] rgw: during "bucket check --fix" set index entry pool id correctly 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 (cherry picked from commit 4c2ac79621c7d110d9b3664ef5ce2027d817560c) Conflicts: src/rgw/rgw_rados.cc Cherry-pick notes: - if condition under changes did not use braces in Pacific but does in later releases --- src/rgw/rgw_rados.cc | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index b9f3e08f59e0..160098af1b18 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -8954,6 +8954,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(); @@ -9009,16 +9010,29 @@ 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; list_state.meta.category = main_category; list_state.meta.etag = etag; list_state.meta.content_type = content_type; - if (astate->obj_tag.length() > 0) + + 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(); + } list_state.meta.owner = owner.get_id().to_str(); list_state.meta.owner_display_name = owner.get_display_name(); -- 2.47.3