diff options
author | Sage Weil <sage@newdream.net> | 2012-02-23 16:30:42 -0800 |
---|---|---|
committer | Sage Weil <sage.weil@dreamhost.com> | 2012-02-24 11:33:57 -0800 |
commit | a7c8bfbea0b0eeb9fc12df97ac0d7b38d8eb3fe3 (patch) | |
tree | 9dbb6a24da8227d0301f16bdb4c7538ac5d6223d | |
parent | e22a45a18de83dfa4cc5ed23a17705d03389acb6 (diff) | |
download | ceph-a7c8bfbea0b0eeb9fc12df97ac0d7b38d8eb3fe3.tar.gz |
osd: query Peering substates
Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r-- | src/osd/PG.cc | 43 | ||||
-rw-r--r-- | src/osd/PG.h | 10 |
2 files changed, 53 insertions, 0 deletions
diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 689df3369cf..ee8f519cd14 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -4399,6 +4399,17 @@ boost::statechart::result PG::RecoveryState::GetInfo::react(const MNotifyRec& in return discard_event(); } +boost::statechart::result PG::RecoveryState::GetInfo::react(const QueryState& q) +{ + PG *pg = context< RecoveryMachine >().pg; + q.ss << state_name << ":\n"; + q.ss << " requested pg_info from " << peer_info_requested << "\n"; + for (set<int>::iterator p = peer_info_requested.begin(); p != peer_info_requested.end(); ++p) + if (pg->peer_info.count(*p)) + q.ss << " got osd." << *p << " " << pg->peer_info[*p] << "\n"; + return forward_event(); +} + void PG::RecoveryState::GetInfo::exit() { context< RecoveryMachine >().log_exit(state_name, enter_time); @@ -4477,6 +4488,13 @@ boost::statechart::result PG::RecoveryState::GetLog::react(const GotLog&) return transit< GetMissing >(); } +boost::statechart::result PG::RecoveryState::GetLog::react(const QueryState& q) +{ + q.ss << state_name << ":\n"; + q.ss << " getting log from osd." << newest_update_osd << "\n"; + return forward_event(); +} + void PG::RecoveryState::GetLog::exit() { context< RecoveryMachine >().log_exit(state_name, enter_time); @@ -4532,6 +4550,13 @@ boost::statechart::result PG::RecoveryState::WaitActingChange::react(const MNoti return discard_event(); } +boost::statechart::result PG::RecoveryState::WaitActingChange::react(const QueryState& q) +{ + q.ss << state_name << ":\n"; + q.ss << " waiting for pg acting set to change\n"; + return forward_event(); +} + void PG::RecoveryState::WaitActingChange::exit() { context< RecoveryMachine >().log_exit(state_name, enter_time); @@ -4639,6 +4664,17 @@ boost::statechart::result PG::RecoveryState::GetMissing::react(const MLogRec& lo return discard_event(); }; +boost::statechart::result PG::RecoveryState::GetMissing::react(const QueryState& q) +{ + PG *pg = context< RecoveryMachine >().pg; + q.ss << state_name << ":\n"; + q.ss << " requested missing set from osds " << peer_missing_requested << "\n"; + for (set<int>::iterator p = peer_missing_requested.begin(); p != peer_missing_requested.end(); ++p) + if (pg->peer_missing.count(*p)) + q.ss << " got osd." << *p << " missing " << pg->peer_missing[*p].num_missing() << " objects\n"; + return forward_event(); +} + void PG::RecoveryState::GetMissing::exit() { context< RecoveryMachine >().log_exit(state_name, enter_time); @@ -4678,6 +4714,13 @@ boost::statechart::result PG::RecoveryState::WaitUpThru::react(const MLogRec& lo return discard_event(); } +boost::statechart::result PG::RecoveryState::WaitUpThru::react(const QueryState& q) +{ + q.ss << state_name << ":\n"; + q.ss << " waiting for osdmap to reflect a new up_thru for this osd\n"; + return forward_event(); +} + void PG::RecoveryState::WaitUpThru::exit() { context< RecoveryMachine >().log_exit(state_name, enter_time); diff --git a/src/osd/PG.h b/src/osd/PG.h index 46096245cf4..2efdf27d053 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1061,12 +1061,14 @@ public: struct WaitActingChange : boost::statechart::state< WaitActingChange, Primary>, NamedState { typedef boost::mpl::list < + boost::statechart::custom_reaction< QueryState >, boost::statechart::custom_reaction< AdvMap >, boost::statechart::custom_reaction< MLogRec >, boost::statechart::custom_reaction< MInfoRec >, boost::statechart::custom_reaction< MNotifyRec > > reactions; WaitActingChange(my_context ctx); + boost::statechart::result react(const QueryState& q); boost::statechart::result react(const AdvMap&); boost::statechart::result react(const MLogRec&); boost::statechart::result react(const MInfoRec&); @@ -1167,9 +1169,11 @@ public: void get_infos(); typedef boost::mpl::list < + boost::statechart::custom_reaction< QueryState >, boost::statechart::transition< GotInfo, GetLog >, boost::statechart::custom_reaction< MNotifyRec > > reactions; + boost::statechart::result react(const QueryState& q); boost::statechart::result react(const MNotifyRec& infoevt); }; @@ -1187,9 +1191,11 @@ public: void exit(); typedef boost::mpl::list < + boost::statechart::custom_reaction< QueryState >, boost::statechart::custom_reaction< MLogRec >, boost::statechart::custom_reaction< GotLog > > reactions; + boost::statechart::result react(const QueryState& q); boost::statechart::result react(const MLogRec& logevt); boost::statechart::result react(const GotLog&); }; @@ -1203,9 +1209,11 @@ public: void exit(); typedef boost::mpl::list < + boost::statechart::custom_reaction< QueryState >, boost::statechart::custom_reaction< MLogRec >, boost::statechart::transition< NeedUpThru, WaitUpThru > > reactions; + boost::statechart::result react(const QueryState& q); boost::statechart::result react(const MLogRec& logevt); }; @@ -1214,9 +1222,11 @@ public: void exit(); typedef boost::mpl::list < + boost::statechart::custom_reaction< QueryState >, boost::statechart::custom_reaction< ActMap >, boost::statechart::custom_reaction< MLogRec > > reactions; + boost::statechart::result react(const QueryState& q); boost::statechart::result react(const ActMap& am); boost::statechart::result react(const MLogRec& logrec); }; |