]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG: use a state_name member instead of overriding get_state_name
authorJosh Durgin <josh.durgin@dreamhost.com>
Wed, 4 May 2011 16:10:00 +0000 (09:10 -0700)
committerJosh Durgin <josh.durgin@dreamhost.com>
Wed, 4 May 2011 17:27:17 +0000 (10:27 -0700)
Also add debugging to each state constructor. Since dout uses
the recovery machine context, anything using it in the constructor
must be a state, not a simple_state.

Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
src/osd/PG.cc
src/osd/PG.h

index 8a0a055f0d659ea0ea6d954470ee2293db685c2c..64dfa0b3397f4d05eae2eea23a2c144f68bcb1d5 100644 (file)
@@ -3719,7 +3719,18 @@ std::ostream& operator<<(std::ostream& oss,
 #define dout_prefix (*_dout << context< RecoveryMachine >().pg->gen_prefix() \
                     << "state<" << get_state_name() << ">: ")
 
+/*------Initial-------*/
+PG::RecoveryState::Initial::Initial(my_context ctx) : my_base(ctx) {
+  state_name = "Initial";
+  dout(10) << "entered state" << dendl;
+}
+
 /*------Started-------*/
+PG::RecoveryState::Started::Started(my_context ctx) : my_base(ctx) {
+  state_name = "Started";
+  dout(10) << "entered state" << dendl;
+}
+
 boost::statechart::result 
 PG::RecoveryState::Started::react(const AdvMap& advmap) {
   dout(10) << "Started advmap" << dendl;
@@ -3733,6 +3744,11 @@ PG::RecoveryState::Started::react(const AdvMap& advmap) {
 }
 
 /*--------Reset---------*/
+PG::RecoveryState::Reset::Reset(my_context ctx) : my_base(ctx) {
+  state_name = "Reset";
+  dout(10) << "entered state" << dendl;
+}
+
 boost::statechart::result 
 PG::RecoveryState::Reset::react(const AdvMap& advmap) {
   PG *pg = context< RecoveryMachine >().pg;
@@ -3756,6 +3772,8 @@ PG::RecoveryState::Reset::react(const ActMap&) {
        
 /*-------Start---------*/
 PG::RecoveryState::Start::Start(my_context ctx) : my_base(ctx) {
+  state_name = "Start";
+  dout(10) << "entered state" << dendl;
   PG *pg = context< RecoveryMachine >().pg;
   if (pg->is_primary()) {
     dout(1) << "transitioning to Primary" << dendl;
@@ -3767,6 +3785,11 @@ PG::RecoveryState::Start::Start(my_context ctx) : my_base(ctx) {
 }
 
 /*---------Primary--------*/
+PG::RecoveryState::Primary::Primary(my_context ctx) : my_base(ctx) {
+  state_name = "Primary";
+  dout(10) << "entered state" << dendl;
+}
+
 boost::statechart::result 
 PG::RecoveryState::Primary::react(const BacklogComplete&) {
   PG *pg = context< RecoveryMachine >().pg;
@@ -3799,6 +3822,8 @@ PG::RecoveryState::Primary::react(const ActMap&) {
 /*---------Peering--------*/
 PG::RecoveryState::Peering::Peering(my_context ctx)
   : my_base(ctx) {
+  state_name = "Peering";
+  dout(10) << "entered state" << dendl;
   PG *pg = context< RecoveryMachine >().pg;
   assert(!pg->is_active());
   assert(!pg->is_peering());
@@ -3824,6 +3849,8 @@ void PG::RecoveryState::Peering::exit() {
 
 /*---------Active---------*/
 PG::RecoveryState::Active::Active(my_context ctx) : my_base(ctx) {
+  state_name = "Active";
+  dout(10) << "entered state" << dendl;
   PG *pg = context< RecoveryMachine >().pg;
   assert(pg->is_primary());
   dout(10) << "In Active, about to call activate" << dendl;
@@ -3933,6 +3960,7 @@ PG::RecoveryState::Active::react(const MInfoRec& infoevt) {
 /*------ReplicaActive-----*/
 PG::RecoveryState::ReplicaActive::ReplicaActive(my_context ctx) 
   : my_base(ctx) {
+  state_name = "ReplicaActive";
   dout(10) << "In ReplicaActive, about to call activate" << dendl;
   PG *pg = context< RecoveryMachine >().pg;
   map< int, map< pg_t, Query> > query_map;
@@ -3963,6 +3991,8 @@ PG::RecoveryState::ReplicaActive::react(const ActMap&) {
 /*-------Stray---*/
 PG::RecoveryState::Stray::Stray(my_context ctx) 
   : my_base(ctx), backlog_requested(false) {
+  state_name = "Stray";
+  dout(10) << "entered state" << dendl;
   PG *pg = context< RecoveryMachine >().pg;
   assert(!pg->is_active());
   assert(!pg->is_peering());
@@ -4060,6 +4090,8 @@ PG::RecoveryState::Stray::react(const ActMap&) {
 
 /*--------GetInfo---------*/
 PG::RecoveryState::GetInfo::GetInfo(my_context ctx) : my_base(ctx) {
+  state_name = "GetInfo";
+  dout(10) << "entered state" << dendl;
   PG *pg = context< RecoveryMachine >().pg;
   pg->generate_past_intervals();
   auto_ptr<PgPriorSet> &prior_set = context< Peering >().prior_set;
@@ -4110,6 +4142,8 @@ PG::RecoveryState::GetInfo::react(const MNotifyRec& infoevt) {
 /*------GetLog------------*/
 PG::RecoveryState::GetLog::GetLog(my_context ctx) : 
   my_base(ctx), newest_update_osd(-1), need_backlog(false), msg(0) {
+  state_name = "GetLog";
+  dout(10) << "entered state" << dendl;
   PG *pg = context< RecoveryMachine >().pg;
   dout(10) << "In GetLog, selecting log location" << dendl;
   eversion_t newest_update;
@@ -4199,6 +4233,8 @@ PG::RecoveryState::GetLog::~GetLog() {
 
 /*------GetMissing--------*/
 PG::RecoveryState::GetMissing::GetMissing(my_context ctx) : my_base(ctx) {
+  state_name = "GetMissing";
+  dout(10) << "entered state" << dendl;
   PG *pg = context< RecoveryMachine >().pg;
   map<int, Missing> &peer_missing = pg->peer_missing;
   for (vector<int>::iterator i = pg->acting.begin()++;
index 01d08f1de9d4e5a08a4633f8b09fb3bc30c3ef36..73e4c807b55313a369a743a1fb8c29554ca0a343 100644 (file)
@@ -894,20 +894,19 @@ public:
 
     /* States */
     struct NamedState {
-      virtual const char *get_state_name() = 0;
+      string state_name;
+      virtual string &get_state_name() { return state_name; }
       virtual ~NamedState() {}
     };
 
     struct Crashed :
       boost::statechart::state< Crashed, RecoveryMachine >, NamedState {
-      const char *get_state_name() { return "Crashed"; }
       Crashed(my_context ctx) : my_base(ctx) { assert(0); }
     };
 
     struct Started;
     struct Initial :
-      boost::statechart::simple_state< Initial, RecoveryMachine >, NamedState {
-      const char *get_state_name() { return "Initial"; }
+      boost::statechart::state< Initial, RecoveryMachine >, NamedState {
       typedef boost::mpl::list <
        boost::statechart::transition< Initialize, Started >,
        boost::statechart::transition< MNotifyRec, Crashed >,
@@ -918,11 +917,11 @@ public:
        boost::statechart::transition< AdvMap, Crashed >,
        boost::statechart::transition< ActMap, Crashed >
        > reactions;
+      Initial(my_context ctx);
     };
 
     struct Reset :
-      boost::statechart::simple_state< Reset, RecoveryMachine >, NamedState {
-      const char *get_state_name() { return "Reset"; }
+      boost::statechart::state< Reset, RecoveryMachine >, NamedState {
       typedef boost::mpl::list <
        boost::statechart::custom_reaction< AdvMap >,
        boost::statechart::custom_reaction< ActMap >,
@@ -935,12 +934,12 @@ public:
        > reactions;
       boost::statechart::result react(const AdvMap&);
       boost::statechart::result react(const ActMap&);
+      Reset(my_context ctx);
     };
 
     struct Start;
     struct Started :
-      boost::statechart::simple_state< Started, RecoveryMachine, Start >, NamedState {
-      const char *get_state_name() { return "Started"; }
+      boost::statechart::state< Started, RecoveryMachine, Start >, NamedState {
       typedef boost::mpl::list <
        boost::statechart::custom_reaction< AdvMap >,
        boost::statechart::transition< ActMap, Crashed >,
@@ -952,6 +951,7 @@ public:
        boost::statechart::transition< Activate, Crashed >
        > reactions;
       boost::statechart::result react(const AdvMap&);
+      Started(my_context ctx);
     };
 
     struct MakePrimary : boost::statechart::event< MakePrimary > {};
@@ -960,7 +960,6 @@ public:
     struct Stray;
     struct Start :
       boost::statechart::state< Start, Started >, NamedState {
-      const char *get_state_name() { return "Start"; }
       typedef boost::mpl::list <
        boost::statechart::transition< MakePrimary, Primary >,
        boost::statechart::transition< MakeStray, Stray >
@@ -972,8 +971,7 @@ public:
     struct Pending;
     struct NeedNewMap : boost::statechart::event< NeedNewMap > {};
     struct Primary :
-      boost::statechart::simple_state< Primary, Started, Peering >, NamedState {
-      const char *get_state_name() { return "Primary"; }
+      boost::statechart::state< Primary, Started, Peering >, NamedState {
       typedef boost::mpl::list <
        boost::statechart::custom_reaction< ActMap >,
        boost::statechart::custom_reaction< BacklogComplete >,
@@ -983,6 +981,7 @@ public:
        boost::statechart::result react(const BacklogComplete&);
        boost::statechart::result react(const ActMap&);
        boost::statechart::result react(const MNotifyRec&);
+      Primary(my_context ctx);
     };
 
     struct Pending :
@@ -993,7 +992,6 @@ public:
     struct Active;
     struct Peering : 
       boost::statechart::state< Peering, Primary, GetInfo >, NamedState {
-      const char *get_state_name() { return "Peering"; }
       typedef boost::mpl::list <
        boost::statechart::transition< Activate, Active >,
        boost::statechart::custom_reaction< AdvMap >
@@ -1007,7 +1005,6 @@ public:
 
     struct Active : 
       boost::statechart::state< Active, Primary >, NamedState {
-      const char *get_state_name() { return "Active"; }
       typedef boost::mpl::list <
        boost::statechart::custom_reaction< ActMap >,
        boost::statechart::custom_reaction< AdvMap >,
@@ -1023,7 +1020,6 @@ public:
     };
 
     struct ReplicaActive : boost::statechart::state< ReplicaActive, Started >, NamedState {
-      const char *get_state_name() { return "ReplicaActive"; }
       typedef boost::mpl::list <
        boost::statechart::transition< MQuery, Crashed >,
        boost::statechart::custom_reaction< ActMap >,
@@ -1036,7 +1032,6 @@ public:
     };
 
     struct Stray : boost::statechart::state< Stray, Started >, NamedState {
-      const char *get_state_name() { return "Stray"; }
       bool backlog_requested;
       map<int, Query> pending_queries;
       typedef boost::mpl::list <
@@ -1061,7 +1056,6 @@ public:
     struct GotInfo : boost::statechart::event< GotInfo > {};
     struct GetInfo :
       boost::statechart::state< GetInfo, Peering >, NamedState {
-      const char *get_state_name() { return "Peering::GetInfo"; }
       set<int> peer_info_requested;
       typedef boost::mpl::list <
        boost::statechart::transition< GotInfo, GetLog >,
@@ -1078,7 +1072,6 @@ public:
     struct GotLog : boost::statechart::event< GotLog > {};
     struct GetLog :
       boost::statechart::state< GetLog, Peering >, NamedState {
-      const char *get_state_name() { return "Peering::GetLog"; }
       int newest_update_osd;
       bool need_backlog;
       bool wait_on_backlog;
@@ -1098,7 +1091,6 @@ public:
 
     struct GetMissing :
       boost::statechart::state< GetMissing, Peering >, NamedState {
-      const char *get_state_name() { return "Peering::GetMissing"; }
       set<int> peer_missing_requested;
       typedef boost::mpl::list <
        boost::statechart::custom_reaction< MLogRec >