From: Sage Weil Date: Sun, 1 Oct 2017 20:01:05 +0000 (-0500) Subject: osd/PG: cancel local reservation in RemoteReservationRejected handler X-Git-Tag: v12.2.2~157^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2a95156d7be9e6c796d5f0ce7bc0eab89c42230d;p=ceph.git osd/PG: cancel local reservation in RemoteReservationRejected handler We can get a RemoteReservationRejected event either because *we* decide to reject, or because we get a REJECT from the primary that means "cancel" (e.g., because recovery/backfill was preempted there). In both cases we want to cancel our remote_reservation. Signed-off-by: Sage Weil (cherry picked from commit f5809afb0f2ca2f1187609e645d6c4c5bd73e39d) --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index cea27fbac346..6f130a0979e0 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -6741,7 +6741,6 @@ PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteBackfillReserved & ldout(pg->cct, 10) << "backfill reservation rejected after reservation: " << "failure injection" << dendl; pg->reject_reservation(); - pg->osd->remote_reserver.cancel_reservation(pg->info.pgid); post_event(RemoteReservationRejected()); return discard_event(); } else if (!pg->cct->_conf->osd_debug_skip_full_check_in_backfill_reservation && @@ -6749,7 +6748,6 @@ PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteBackfillReserved & ldout(pg->cct, 10) << "backfill reservation rejected after reservation: " << ss.str() << dendl; pg->reject_reservation(); - pg->osd->remote_reserver.cancel_reservation(pg->info.pgid); post_event(RemoteReservationRejected()); return discard_event(); } else { @@ -6768,6 +6766,7 @@ boost::statechart::result PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteReservationRejected &evt) { PG *pg = context< RecoveryMachine >().pg; + pg->osd->remote_reserver.cancel_reservation(pg->info.pgid); return transit(); }