]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: ignore RemoteReservationRejected if we are RepNotRecoverying
authorSage Weil <sage@redhat.com>
Sun, 1 Oct 2017 20:03:22 +0000 (15:03 -0500)
committerSage Weil <sage@redhat.com>
Thu, 5 Oct 2017 19:38:45 +0000 (14:38 -0500)
The primary may send us a REJECT (meaning cancel) if recovery/backfill is
preempted there.  That can happen even if the recovery isn't reserved or
requested here (e.g., because the primary is still waiting for the local
reservation).  Just ignore it and remain in RepNotRecovering.

Fixes: http://tracker.ceph.com/issues/21613
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 1ce235c5dd0b777223f6465e71fb7ee4befd13d8)

src/osd/PG.h

index 037928787db46a9e9ec0e265c15c6cc52da14dc9..2bbe927aa7c47693a41fe38cddec0cdc9d86b62f 100644 (file)
@@ -2017,6 +2017,7 @@ public:
       typedef boost::mpl::list<
        boost::statechart::custom_reaction< RequestBackfillPrio >,
         boost::statechart::transition< RequestRecovery, RepWaitRecoveryReserved >,
+       boost::statechart::transition< RemoteReservationRejected, RepNotRecovering >,   // if primary is preempted or cancels
        boost::statechart::transition< RecoveryDone, RepNotRecovering >  // for compat with pre-reservation peers
        > reactions;
       explicit RepNotRecovering(my_context ctx);