]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: cancel local reservation in RemoteReservationRejected handler
authorSage Weil <sage@redhat.com>
Sun, 1 Oct 2017 20:01:05 +0000 (15:01 -0500)
committerSage Weil <sage@redhat.com>
Thu, 5 Oct 2017 19:38:41 +0000 (14:38 -0500)
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 <sage@redhat.com>
(cherry picked from commit f5809afb0f2ca2f1187609e645d6c4c5bd73e39d)

src/osd/PG.cc

index cea27fbac346d2d6f0f5efed19ab4995daa36539..6f130a0979e04aca52120f58eb4e4c6f59c3a116 100644 (file)
@@ -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<RepNotRecovering>();
 }