summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2012-02-23 16:30:42 -0800
committerSage Weil <sage.weil@dreamhost.com>2012-02-24 11:33:57 -0800
commita7c8bfbea0b0eeb9fc12df97ac0d7b38d8eb3fe3 (patch)
tree9dbb6a24da8227d0301f16bdb4c7538ac5d6223d
parente22a45a18de83dfa4cc5ed23a17705d03389acb6 (diff)
downloadceph-a7c8bfbea0b0eeb9fc12df97ac0d7b38d8eb3fe3.tar.gz
osd: query Peering substates
Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r--src/osd/PG.cc43
-rw-r--r--src/osd/PG.h10
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);
};