return discard_event();
}
+boost::statechart::result PG::RecoveryState::Started::react(const QueryState& q)
+{
+ q.ss << state_name << ":\n";
+ return discard_event();
+}
+
void PG::RecoveryState::Started::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
return transit< Started >();
}
+boost::statechart::result PG::RecoveryState::Reset::react(const QueryState& q)
+{
+ q.ss << state_name << ":\n";
+ return discard_event();
+}
+
void PG::RecoveryState::Reset::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
return forward_event();
}
+boost::statechart::result PG::RecoveryState::Peering::react(const QueryState& q)
+{
+ q.ss << state_name << ":\n";
+ q.ss << " probing osds " << prior_set->probe << "\n";
+ if (prior_set->down.size())
+ q.ss << " would also like to query down osds " << prior_set->down << "\n";
+ if (prior_set->pg_down)
+ q.ss << " peering is blocked due to down osds\n";
+ for (map<int,epoch_t>::iterator p = prior_set->blocked_by.begin();
+ p != prior_set->blocked_by.end();
+ p++)
+ q.ss << " starting osd." << p->first << " (last lost_at " << p->second
+ << ") or marking it lost may let us proceed\n";
+ return forward_event();
+}
+
void PG::RecoveryState::Peering::exit()
{
dout(10) << "Leaving Peering" << dendl;
return discard_event();
}
+boost::statechart::result PG::RecoveryState::Active::react(const QueryState& q)
+{
+ q.ss << state_name << ":\n";
+ return forward_event();
+}
+
void PG::RecoveryState::Active::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
return discard_event();
}
+boost::statechart::result PG::RecoveryState::ReplicaActive::react(const QueryState& q)
+{
+ q.ss << state_name << ":\n";
+ return forward_event();
+}
+
void PG::RecoveryState::ReplicaActive::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);
end_handle();
}
+void PG::RecoveryState::handle_query_state(stringstream &ss)
+{
+ dout(10) << "handle_query_state" << dendl;
+ QueryState q(ss);
+ machine.process_event(q);
+}
+
+
/*---------------------------------------------------*/
#undef dout_prefix
#define dout_prefix (*_dout << (debug_pg ? debug_pg->gen_prefix() : string()) << " PriorSet: ")
rctx = 0;
}
+ struct QueryState : boost::statechart::event< QueryState > {
+ stringstream& ss;
+ QueryState(stringstream& s) : ss(s) {}
+ };
+
struct MInfoRec : boost::statechart::event< MInfoRec > {
int from;
pg_info_t &info;
void exit();
typedef boost::mpl::list <
+ boost::statechart::custom_reaction< QueryState >,
boost::statechart::custom_reaction< AdvMap >,
boost::statechart::custom_reaction< ActMap >,
boost::statechart::transition< boost::statechart::event_base, Crashed >
> reactions;
+ boost::statechart::result react(const QueryState& q);
boost::statechart::result react(const AdvMap&);
boost::statechart::result react(const ActMap&);
};
void exit();
typedef boost::mpl::list <
+ boost::statechart::custom_reaction< QueryState >,
boost::statechart::custom_reaction< AdvMap >,
boost::statechart::transition< boost::statechart::event_base, Crashed >
> reactions;
+ boost::statechart::result react(const QueryState& q);
boost::statechart::result react(const AdvMap&);
};
void exit();
typedef boost::mpl::list <
+ boost::statechart::custom_reaction< QueryState >,
boost::statechart::transition< Activate, Active >,
boost::statechart::custom_reaction< AdvMap >
> reactions;
+ boost::statechart::result react(const QueryState& q);
boost::statechart::result react(const AdvMap &advmap);
};
void exit();
typedef boost::mpl::list <
+ boost::statechart::custom_reaction< QueryState >,
boost::statechart::custom_reaction< ActMap >,
boost::statechart::custom_reaction< AdvMap >,
boost::statechart::custom_reaction< MInfoRec >,
boost::statechart::custom_reaction< MLogRec >,
boost::statechart::custom_reaction< RecoveryComplete >
> reactions;
+ boost::statechart::result react(const QueryState& q);
boost::statechart::result react(const ActMap&);
boost::statechart::result react(const AdvMap&);
boost::statechart::result react(const MInfoRec& infoevt);
void exit();
typedef boost::mpl::list <
+ boost::statechart::custom_reaction< QueryState >,
boost::statechart::custom_reaction< ActMap >,
boost::statechart::custom_reaction< MQuery >,
boost::statechart::custom_reaction< MInfoRec >,
boost::statechart::custom_reaction< MLogRec >
> reactions;
+ boost::statechart::result react(const QueryState& q);
boost::statechart::result react(const MInfoRec& infoevt);
boost::statechart::result react(const MLogRec& logevt);
boost::statechart::result react(const ActMap&);
void handle_recovery_complete(RecoveryCtx *ctx);
void handle_create(RecoveryCtx *ctx);
void handle_loaded(RecoveryCtx *ctx);
+ void handle_query_state(stringstream& ss);
} recovery_state;