]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: move reject_reservation out of RemoteReservationRejected reaction
authorSage Weil <sage@redhat.com>
Sun, 1 Oct 2017 19:59:31 +0000 (14:59 -0500)
committerSage Weil <sage@redhat.com>
Thu, 5 Oct 2017 19:38:38 +0000 (14:38 -0500)
The RemoteReservationRejected event is also submitted when we are a
replica or backfill target and get a MBackfillReserve REJECT message
because the primary canceled or was preempted.  In that case, we don't
want to send a REJECT back to the primary; we only need to send it in the
cases where *we*, locally, decide to reject.  Move the call to those call
sites.

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

src/osd/PG.cc

index c285d00e26938d5eeb0960bfa51278b9170bc6c6..cea27fbac346d2d6f0f5efed19ab4995daa36539 100644 (file)
@@ -6704,11 +6704,13 @@ PG::RecoveryState::RepNotRecovering::react(const RequestBackfillPrio &evt)
       (rand()%1000 < (pg->cct->_conf->osd_debug_reject_backfill_probability*1000.0))) {
     ldout(pg->cct, 10) << "backfill reservation rejected: failure injection"
                       << dendl;
+    pg->reject_reservation();
     post_event(RemoteReservationRejected());
   } else if (!pg->cct->_conf->osd_debug_skip_full_check_in_backfill_reservation &&
       pg->osd->check_backfill_full(ss)) {
     ldout(pg->cct, 10) << "backfill reservation rejected: "
                       << ss.str() << dendl;
+    pg->reject_reservation();
     post_event(RemoteReservationRejected());
   } else {
     pg->osd->remote_reserver.request_reservation(
@@ -6738,6 +6740,7 @@ PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteBackfillReserved &
       (rand()%1000 < (pg->cct->_conf->osd_debug_reject_backfill_probability*1000.0))) {
     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();
@@ -6745,6 +6748,7 @@ PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteBackfillReserved &
             pg->osd->check_backfill_full(ss)) {
     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();
@@ -6764,7 +6768,6 @@ boost::statechart::result
 PG::RecoveryState::RepWaitBackfillReserved::react(const RemoteReservationRejected &evt)
 {
   PG *pg = context< RecoveryMachine >().pg;
-  pg->reject_reservation();
   return transit<RepNotRecovering>();
 }