From f5809afb0f2ca2f1187609e645d6c4c5bd73e39d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 1 Oct 2017 15:01:05 -0500 Subject: [PATCH] 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 --- src/osd/PG.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 762d83d9d1d..338fd9a6d23 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -6522,7 +6522,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 && @@ -6530,7 +6529,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 { @@ -6549,6 +6547,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(); }