summaryrefslogtreecommitdiff
path: root/src/osd/OSD.cc
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-05-29 12:24:28 -0700
committerSage Weil <sage@inktank.com>2013-05-29 22:43:49 -0700
commit28ea184d3a37fa8d878c82571ae64607c6717b43 (patch)
treea31c1152125664239a769a8b875d5af9c78b6a8a /src/osd/OSD.cc
parenta4d3b47a923ea28a52b1afa5e559ef0ccaefb9e0 (diff)
downloadceph-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/osd/OSD.cc')
-rw-r--r--src/osd/OSD.cc14
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?