From 479b05a8c1659e80028190c7fe90e762084c4c24 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sun, 1 Oct 2017 15:03:22 -0500 Subject: [PATCH] osd/PG: ignore RemoteReservationRejected if we are RepNotRecoverying 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 (cherry picked from commit 1ce235c5dd0b777223f6465e71fb7ee4befd13d8) --- src/osd/PG.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/osd/PG.h b/src/osd/PG.h index 037928787db46..2bbe927aa7c47 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -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); -- 2.39.5