osd: clean up old _from target cleanup; fix one case; share map

Clean up the code to mirror the _to case.

Previously we would not mark down an old _from that is still a _to but with
a new address.  Now we do.

Share a map while we're at it, just to be nice!

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
This commit is contained in:
Sage Weil 2011-05-20 11:29:05 -07:00
parent 0f1be62914
commit 74691e7cea

View File

@ -1495,16 +1495,25 @@ void OSD::update_heartbeat_peers()
for (map<int,epoch_t>::iterator p = old_from.begin();
p != old_from.end();
p++) {
if (heartbeat_from.count(p->first) == 0 ||
heartbeat_inst[p->first] != old_inst[p->first]) {
if (heartbeat_to.count(p->first) == 0) {
dout(10) << "update_heartbeat_peers: marking down old _from peer " << old_inst[p->first]
<< " as of " << p->second << dendl;
heartbeat_messenger->mark_down(old_inst[p->first].addr);
} else {
dout(10) << "update_heartbeat_peers: old _from peer " << old_inst[p->first]
<< " is still a _to peer, not marking down" << dendl;
}
assert(old_inst.count(p->first));
if (heartbeat_from.count(p->first) && heartbeat_inst[p->first] == old_inst[p->first])
continue;
// share latest map with this peer, just to be nice.
dout(10) << "update_heartbeat_peers: sharing map with old _from peer " << old_inst[p->first]
<< dendl;
_share_map_outgoing(old_inst[p->first]);
if (heartbeat_to.count(p->first) && old_inst[p->first] == heartbeat_inst[p->first]) {
dout(10) << "update_heartbeat_peers: old _from peer " << old_inst[p->first]
<< " is still a _to peer, not marking down" << dendl;
} else {
dout(10) << "update_heartbeat_peers: marking down old _from peer " << old_inst[p->first]
<< " as of " << p->second << dendl;
Connection *con = heartbeat_messenger->get_connection(old_inst[p->first]);
heartbeat_messenger->mark_disposable(con);
heartbeat_messenger->mark_down_on_empty(con);
con->put();
}
}