From 5ecc42b5c2e4ded2db780473e4c5c3d0ea9e49fb Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 14 May 2011 13:46:09 -0700 Subject: [PATCH] PG: Remove downed osds from peer_missing and peer_info Signed-off-by: Samuel Just Signed-off-by: Sage Weil --- src/osd/PG.cc | 19 +++++++++++++++++++ src/osd/PG.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 327b408337a1d..c38999c412e84 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -3928,6 +3928,25 @@ PG::RecoveryState::Primary::react(const ActMap&) { 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::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); } diff --git a/src/osd/PG.h b/src/osd/PG.h index f360da37521b2..021ec3b1afd82 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -1079,10 +1079,12 @@ public: 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&); }; -- 2.47.3