]> git.apps.os.sepia.ceph.com Git - ceph-ci.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>
Sun, 1 Oct 2017 20:06:22 +0000 (15:06 -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>
src/osd/PG.h

index d9eb6a3fd074cbbb4a309e528018faa16d5c8670..02c52d7dc24f008a1c090f047cb46c98f3bfe041 100644 (file)
@@ -2012,6 +2012,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);