From ba106b6d32fb3138b7a61fe613b211e02f1e44aa Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 19 Sep 2017 15:26:40 -0500 Subject: [PATCH] osd/PG: allow local recovery reservations to be preempted If a PG has a higher recovery priority and a lower-priority item is in progress, allow it to be preempted. This triggers the RecoveryCancel or BackfillCancel event with a 0 delay, which means it will immediately re-request a reservation (and presumably wait). Signed-off-by: Sage Weil (cherry picked from commit a8534cce1a1661375a93aff2314633bce63695ed) --- src/osd/PG.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 36d0aabfa8f52..c285d00e26938 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -6569,7 +6569,10 @@ PG::RecoveryState::WaitLocalBackfillReserved::WaitLocalBackfillReserved(my_conte new QueuePeeringEvt( pg, pg->get_osdmap()->get_epoch(), LocalBackfillReserved()), - pg->get_backfill_priority()); + pg->get_backfill_priority(), + new QueuePeeringEvt( + pg, pg->get_osdmap()->get_epoch(), + DeferBackfill(0.0))); pg->publish_stats_to_osd(); } @@ -6827,7 +6830,10 @@ PG::RecoveryState::WaitLocalRecoveryReserved::WaitLocalRecoveryReserved(my_conte new QueuePeeringEvt( pg, pg->get_osdmap()->get_epoch(), LocalRecoveryReserved()), - pg->get_recovery_priority()); + pg->get_recovery_priority(), + new QueuePeeringEvt( + pg, pg->get_osdmap()->get_epoch(), + DeferRecovery(0.0))); pg->publish_stats_to_osd(); } -- 2.39.5