return discard_event();
}
+boost::statechart::result
+PG::RecoveryState::Primary::react(const AdvMap& advmap)
+{
+ PG *pg = context< RecoveryMachine >().pg;
+ OSDMap &osdmap = advmap.osdmap;
+
+ // Remove any downed osds from peer_info
+ map<int,PG::Info>::iterator p = pg->peer_info.begin();
+ while (p != pg->peer_info.end()) {
+ if (!osdmap.is_up(p->first)) {
+ dout(10) << " dropping down osd" << p->first << " info " << p->second << dendl;
+ pg->peer_missing.erase(p->first);
+ pg->peer_info.erase(p++);
+ } else
+ p++;
+ }
+ return forward_event();
+}
+
void PG::RecoveryState::Primary::exit() {
context< RecoveryMachine >().log_exit(state_name, enter_time);
}
boost::statechart::custom_reaction< ActMap >,
boost::statechart::custom_reaction< BacklogComplete >,
boost::statechart::custom_reaction< MNotifyRec >,
+ boost::statechart::custom_reaction< AdvMap >,
boost::statechart::transition< NeedNewMap, WaitActingChange >
> reactions;
boost::statechart::result react(const BacklogComplete&);
boost::statechart::result react(const ActMap&);
+ boost::statechart::result react(const AdvMap&);
boost::statechart::result react(const MNotifyRec&);
};