From 7743d33136e7e2431cca1c3929adba6cd386e773 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Mon, 15 Apr 2024 21:30:07 +0800 Subject: [PATCH] crimson/osd/osd_operations/client_request: retrieve the correct version for objects to be recovered urgently PG::is_unreadable_object() can't guarantee that it'll set the parameter "v", so CommonClientRequest::do_recover_missing() has to retrieve it by itself Signed-off-by: Xuehan Xu --- src/crimson/osd/osd_operations/client_request_common.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/osd_operations/client_request_common.cc b/src/crimson/osd/osd_operations/client_request_common.cc index 7865b4d7a1b60..62a586ef6283a 100644 --- a/src/crimson/osd/osd_operations/client_request_common.cc +++ b/src/crimson/osd/osd_operations/client_request_common.cc @@ -73,12 +73,17 @@ CommonClientRequest::do_recover_missing( assert(pg->is_primary()); logger().debug("{} reqid {} check for recovery, {}", __func__, reqid, soid); - if (!pg->is_unreadable_object(soid, &ver) && + auto &peering_state = pg->get_peering_state(); + auto &missing_loc = peering_state.get_missing_loc(); + bool needs_recovery = missing_loc.needs_recovery(soid, &ver); + if (!pg->is_unreadable_object(soid) && !pg->is_degraded_or_backfilling_object(soid)) { logger().debug("{} reqid {} nothing to recover {}", __func__, reqid, soid); return seastar::now(); } + ceph_assert(needs_recovery); + logger().debug("{} reqid {} need to wait for recovery, {} version {}", __func__, reqid, soid, ver); if (pg->get_recovery_backend()->is_recovering(soid)) { -- 2.39.5