From: Sage Weil Date: Sat, 28 Oct 2017 21:02:52 +0000 (-0500) Subject: osd/PG: handle RELEASE race with Remote*Reserved on replica X-Git-Tag: v13.0.1~375^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=08fb3351edef81b8b379309c109b2b8b407d08a5;p=ceph.git osd/PG: handle RELEASE race with Remote*Reserved on replica If we get a REQUEST and RELEASE in quick succession, we may process a local Remote*Reserved back in the RepNotRecovering state. Signed-off-by: Sage Weil --- diff --git a/src/osd/PG.h b/src/osd/PG.h index 74aa788056e..024c29abcf3 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -2354,11 +2354,21 @@ protected: boost::statechart::custom_reaction< RejectRemoteReservation >, boost::statechart::transition< RemoteReservationRejected, RepNotRecovering >, boost::statechart::transition< RemoteReservationCanceled, RepNotRecovering >, + boost::statechart::custom_reaction< RemoteRecoveryReserved >, + boost::statechart::custom_reaction< RemoteBackfillReserved >, boost::statechart::transition< RecoveryDone, RepNotRecovering > // for compat with pre-reservation peers > reactions; explicit RepNotRecovering(my_context ctx); boost::statechart::result react(const RequestRecoveryPrio &evt); boost::statechart::result react(const RequestBackfillPrio &evt); + boost::statechart::result react(const RemoteBackfillReserved &evt) { + // my reservation completion raced with a RELEASE from primary + return discard_event(); + } + boost::statechart::result react(const RemoteRecoveryReserved &evt) { + // my reservation completion raced with a RELEASE from primary + return discard_event(); + } boost::statechart::result react(const RejectRemoteReservation &evt); void exit(); };