From: David Zafman Date: Thu, 19 Oct 2017 01:07:41 +0000 (-0700) Subject: osd: Fixes for mark_unfound_lost X-Git-Tag: v12.2.3~115^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=152272ce49cf2b32e4b3dbba5aa28019e9a183e0;p=ceph.git 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 (cherry picked from commit 0c106f1a46815bb769e7a503b1adb265480b6779) --- diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 7f081b89623a..7a70ad3e5120 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -10786,6 +10786,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; } @@ -10812,10 +10819,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(