]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: allow local recovery reservations to be preempted
authorSage Weil <sage@redhat.com>
Tue, 19 Sep 2017 20:26:40 +0000 (15:26 -0500)
committerSage Weil <sage@redhat.com>
Wed, 27 Sep 2017 19:40:18 +0000 (15:40 -0400)
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 <sage@redhat.com>
src/osd/PG.cc

index 5f53cc6ea12a2f457bbaf04e5e7b253d49aa6922..d333843b292ef3f275311ecf4650a738d5635e14 100644 (file)
@@ -6364,7 +6364,10 @@ PG::RecoveryState::WaitLocalBackfillReserved::WaitLocalBackfillReserved(my_conte
     new QueuePeeringEvt<LocalBackfillReserved>(
       pg, pg->get_osdmap()->get_epoch(),
       LocalBackfillReserved()),
-    pg->get_backfill_priority());
+    pg->get_backfill_priority(),
+    new QueuePeeringEvt<DeferBackfill>(
+      pg, pg->get_osdmap()->get_epoch(),
+      DeferBackfill(0.0)));
   pg->publish_stats_to_osd();
 }
 
@@ -6622,7 +6625,10 @@ PG::RecoveryState::WaitLocalRecoveryReserved::WaitLocalRecoveryReserved(my_conte
     new QueuePeeringEvt<LocalRecoveryReserved>(
       pg, pg->get_osdmap()->get_epoch(),
       LocalRecoveryReserved()),
-    pg->get_recovery_priority());
+    pg->get_recovery_priority(),
+    new QueuePeeringEvt<DeferRecovery>(
+      pg, pg->get_osdmap()->get_epoch(),
+      DeferRecovery(0.0)));
   pg->publish_stats_to_osd();
 }