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: v13.0.1~656^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f5809afb0f2ca2f1187609e645d6c4c5bd73e39d;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 --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 762d83d9d1d6..338fd9a6d233 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(); }