]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: on recovery done, requeue for backfill
authorSage Weil <sage@redhat.com>
Mon, 23 Oct 2017 03:46:00 +0000 (22:46 -0500)
committerSage Weil <sage@redhat.com>
Mon, 23 Oct 2017 22:23:57 +0000 (17:23 -0500)
We were keeping our existing recovery reservation slot (with a high
priority) and going straight to waiting for backfill reservations on
the peers.  This is a problem because the reserver thinks we're doing
high priority work when we're actually doing lower-priority backfill.

Fix by closing out our recovery reservation and going to the
WaitLocalBackfillReserved state, where we'll re-request backfill at the
appropriate priority.

Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 09c50e2fe4fc3e8951a483e4b2693f0ffc008dcf)

src/osd/PG.cc

index af86a5a7d8152db0e33a3460072ffc0c5ca4abf7..9f151e86f0f87100473d438516f1d78884cca89f 100644 (file)
@@ -6985,7 +6985,8 @@ PG::RecoveryState::Recovering::react(const RequestBackfill &evt)
   pg->state_clear(PG_STATE_RECOVERING);
   pg->state_clear(PG_STATE_FORCED_RECOVERY);
   release_reservations();
-  return transit<WaitRemoteBackfillReserved>();
+  pg->osd->local_reserver.cancel_reservation(pg->info.pgid);
+  return transit<WaitLocalBackfillReserved>();
 }
 
 boost::statechart::result