From: David Zafman Date: Mon, 9 Oct 2017 21:03:23 +0000 (-0700) Subject: osd: Better recovery/backfill restart for mark_unfound_lost delete/revert X-Git-Tag: v12.2.3~146^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3068ea1e93f1806b74b78c636693f7afcff95aea;p=ceph.git osd: Better recovery/backfill restart for mark_unfound_lost delete/revert Signed-off-by: David Zafman (cherry picked from commit 689bff354a6bfa1cf47b0d0a04fa9f1b2ef68f75) --- diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index df828787fdaf..0e6ab6777a73 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -721,7 +721,7 @@ void PrimaryLogPG::wait_for_blocked_object(const hobject_t& soid, OpRequestRef o void PrimaryLogPG::maybe_force_recovery() { - // no force if not in degraded/recovery/backfill stats + // no force if not in degraded/recovery/backfill states if (!is_degraded() && !state_test(PG_STATE_RECOVERING | PG_STATE_RECOVERY_WAIT | @@ -2349,6 +2349,7 @@ void PrimaryLogPG::do_op(OpRequestRef& op) // force recovery of the oldest missing object if too many logs maybe_force_recovery(); } + PrimaryLogPG::cache_result_t PrimaryLogPG::maybe_handle_manifest_detail( OpRequestRef op, bool write_ordered, @@ -10815,7 +10816,23 @@ void PrimaryLogPG::mark_all_unfound_lost( release_backoffs(p.first); } requeue_object_waiters(waiting_for_unreadable_object); - queue_recovery(); + if (is_recovery_unfound()) { + queue_peering_event( + CephPeeringEvtRef( + std::make_shared( + get_osdmap()->get_epoch(), + get_osdmap()->get_epoch(), + DoRecovery()))); + } else if (is_backfill_unfound()) { + queue_peering_event( + CephPeeringEvtRef( + std::make_shared( + get_osdmap()->get_epoch(), + get_osdmap()->get_epoch(), + RequestBackfill()))); + } else { + queue_recovery(); + } stringstream ss; ss << "pg has " << num_unfound