diff options
author | Sage Weil <sage@inktank.com> | 2013-05-29 12:24:28 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-05-29 22:43:49 -0700 |
commit | 28ea184d3a37fa8d878c82571ae64607c6717b43 (patch) | |
tree | a31c1152125664239a769a8b875d5af9c78b6a8a /src | |
parent | a4d3b47a923ea28a52b1afa5e559ef0ccaefb9e0 (diff) | |
download | ceph-28ea184d3a37fa8d878c82571ae64607c6717b43.tar.gz |
osd: remove down hb peers
If a (say, random) peer goes down, filter it out.
Signed-off-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/osd/OSD.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index c8a5b9a263e..0e65172723c 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2350,13 +2350,19 @@ void OSD::maybe_update_heartbeat_peers() _add_heartbeat_peer(*p); } - // identify extras - for (map<int,HeartbeatInfo>::iterator p = heartbeat_peers.begin(); - p != heartbeat_peers.end(); - ++p) { + // remove down peers; enumerate extras + map<int,HeartbeatInfo>::iterator p = heartbeat_peers.begin(); + while (p != heartbeat_peers.end()) { + if (!osdmap->is_up(p->first)) { + int o = p->first; + ++p; + _remove_heartbeat_peer(o); + continue; + } if (p->second.epoch < osdmap->get_epoch()) { extras.insert(p->first); } + ++p; } // too few? |