]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/PG: handle racy preemption
authorSage Weil <sage@redhat.com>
Thu, 21 Sep 2017 16:37:13 +0000 (12:37 -0400)
committerSage Weil <sage@redhat.com>
Fri, 29 Sep 2017 16:53:59 +0000 (11:53 -0500)
If we finish recovery/backfill and go active, but also get
preempted at the same time, we can ignore the event.

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

src/osd/PG.h

index a67eaf1b1ba0fcc3aed6655e5f8e1dd471845998..037928787db46a9e9ec0e265c15c6cc52da14dc9 100644 (file)
@@ -1851,7 +1851,9 @@ public:
        boost::statechart::custom_reaction< MNotifyRec >,
        boost::statechart::custom_reaction< MLogRec >,
        boost::statechart::custom_reaction< Backfilled >,
-       boost::statechart::custom_reaction< AllReplicasActivated >
+       boost::statechart::custom_reaction< AllReplicasActivated >,
+       boost::statechart::custom_reaction< DeferRecovery >,
+       boost::statechart::custom_reaction< DeferBackfill >
        > reactions;
       boost::statechart::result react(const QueryState& q);
       boost::statechart::result react(const ActMap&);
@@ -1863,6 +1865,12 @@ public:
        return discard_event();
       }
       boost::statechart::result react(const AllReplicasActivated&);
+      boost::statechart::result react(const DeferRecovery& evt) {
+       return discard_event();
+      }
+      boost::statechart::result react(const DeferBackfill& evt) {
+       return discard_event();
+      }
     };
 
     struct Clean : boost::statechart::state< Clean, Active >, NamedState {
@@ -1956,7 +1964,9 @@ public:
        boost::statechart::custom_reaction< MQuery >,
        boost::statechart::custom_reaction< MInfoRec >,
        boost::statechart::custom_reaction< MLogRec >,
-       boost::statechart::custom_reaction< Activate >
+       boost::statechart::custom_reaction< Activate >,
+       boost::statechart::custom_reaction< DeferRecovery >,
+       boost::statechart::custom_reaction< DeferBackfill >
        > reactions;
       boost::statechart::result react(const QueryState& q);
       boost::statechart::result react(const MInfoRec& infoevt);
@@ -1964,6 +1974,12 @@ public:
       boost::statechart::result react(const ActMap&);
       boost::statechart::result react(const MQuery&);
       boost::statechart::result react(const Activate&);
+      boost::statechart::result react(const DeferRecovery& evt) {
+       return discard_event();
+      }
+      boost::statechart::result react(const DeferBackfill& evt) {
+       return discard_event();
+      }
     };
 
     struct RepRecovering : boost::statechart::state< RepRecovering, ReplicaActive >, NamedState {