From 59e3ff197aca7d696f6874a9f927e02171fd122b Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Tue, 30 Apr 2024 14:55:45 +0800 Subject: [PATCH] crimson/osd/pg_recovery: skip unfound objects when recovering the primary Fixes: https://tracker.ceph.com/issues/65696 Signed-off-by: Xuehan Xu (cherry picked from commit 3d03ac21bd8de591e4d340e274863bca9d31b170) --- src/crimson/osd/pg_recovery.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/crimson/osd/pg_recovery.cc b/src/crimson/osd/pg_recovery.cc index b2f813447b371..4ed861cfd7ef7 100644 --- a/src/crimson/osd/pg_recovery.cc +++ b/src/crimson/osd/pg_recovery.cc @@ -146,11 +146,23 @@ size_t PGRecovery::start_primary_recovery_ops( } else { soid = p->second; } - const pg_missing_item& item = missing.get_items().find(p->second)->second; - ++p; hobject_t head = soid.get_head(); + if (pg->get_peering_state().get_missing_loc().is_unfound(soid)) { + logger().debug("{}: object {} unfound", __func__, soid); + ++skipped; + continue; + } + if (pg->get_peering_state().get_missing_loc().is_unfound(head)) { + logger().debug("{}: head object {} unfound", __func__, soid); + ++skipped; + continue; + } + + const pg_missing_item& item = missing.get_items().find(p->second)->second; + ++p; + bool head_missing = missing.is_missing(head); logger().info( "{} {} item.need {} {} {} {} {}", -- 2.39.5