From 4c2ac79621c7d110d9b3664ef5ce2027d817560c 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 --- src/rgw/rgw_rados.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index c2aa85f46f754..5d609e69a4492 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -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(); } -- 2.39.5