From 8d301d299b7107015a70eefdfb7aa95d8bf856be Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Wed, 4 May 2011 09:10:00 -0700 Subject: [PATCH] PG: use a state_name member instead of overriding get_state_name 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 --- src/osd/PG.cc | 36 ++++++++++++++++++++++++++++++++++++ src/osd/PG.h | 28 ++++++++++------------------ 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 8a0a055f0d6..64dfa0b3397 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -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 &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 &peer_missing = pg->peer_missing; for (vector::iterator i = pg->acting.begin()++; diff --git a/src/osd/PG.h b/src/osd/PG.h index 01d08f1de9d..73e4c807b55 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -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 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 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 peer_missing_requested; typedef boost::mpl::list < boost::statechart::custom_reaction< MLogRec >