From 0c106f1a46815bb769e7a503b1adb265480b6779 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Wed, 18 Oct 2017 18:07:41 -0700 Subject: [PATCH] osd: Fixes for mark_unfound_lost Let recovery requeue operations and release backoff For "delete" mark object context, if present, to non-existent Signed-off-by: David Zafman --- src/osd/PrimaryLogPG.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index a8c877f1b2a..05107298d98 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -10550,6 +10550,13 @@ void PrimaryLogPG::mark_all_unfound_lost( log_entries.push_back(e); oids.push_back(oid); + // If context found mark object as deleted in case + // of racing with new creation. This can happen if + // object lost and EIO at primary. + obc = object_contexts.lookup(oid); + if (obc) + obc->obs.exists = false; + ++v.version; ++m; } @@ -10576,10 +10583,6 @@ void PrimaryLogPG::mark_all_unfound_lost( } } - for (auto& p : waiting_for_unreadable_object) { - release_backoffs(p.first); - } - requeue_object_waiters(waiting_for_unreadable_object); if (is_recovery_unfound()) { queue_peering_event( CephPeeringEvtRef( -- 2.39.5