summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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?