Merge pull request #12069 from liupan1111/wip-osd-up-heartbeat-peers

osd: heartbeat peers need to be updated when a new OSD added into an existed cluster

Reviewed-by: Sage Weil <sage@redhat.com>
Reviewed-by: Haomai Wang <haomai@xsky.com>
This commit is contained in:
Yuri Weinstein 2016-11-22 16:29:12 -08:00 committed by GitHub
commit 2c3cda2da8
3 changed files with 10 additions and 8 deletions

View File

@ -1566,7 +1566,7 @@ bool OSDMonitor::preprocess_failure(MonOpRequestRef op)
// weird?
if (!osdmap.have_inst(badboy)) {
if (osdmap.is_down(badboy)) {
dout(5) << "preprocess_failure dne(/dup?): " << m->get_target() << ", from " << m->get_orig_source_inst() << dendl;
if (m->get_epoch() < osdmap.get_epoch())
send_incremental(op, m->get_epoch()+1);

View File

@ -6659,6 +6659,7 @@ void OSD::note_down_osd(int peer)
void OSD::note_up_osd(int peer)
{
service.forget_peer_epoch(peer, osdmap->get_epoch() - 1);
heartbeat_set_peers_need_update();
}
struct C_OnMapCommit : public Context {
@ -6982,13 +6983,17 @@ void OSD::_committed_osd_maps(epoch_t first, epoch_t last, MOSDMap *m)
osdmap->get_all_osds(old);
for (set<int>::iterator p = old.begin(); p != old.end(); ++p) {
if (*p != whoami &&
osdmap->have_inst(*p) && // in old map
!newmap->is_up(*p)) { // but not the new one
osdmap->is_up(*p) && // in old map
newmap->is_down(*p)) { // but not the new one
if (!waited_for_reservations) {
service.await_reserved_maps();
waited_for_reservations = true;
}
note_down_osd(*p);
} else if (*p != whoami &&
osdmap->is_down(*p) &&
newmap->is_up(*p)) {
note_up_osd(*p);
}
}
@ -7497,11 +7502,11 @@ bool OSD::require_same_peer_instance(Message *m, OSDMapRef& map,
{
int from = m->get_source().num();
if (!map->have_inst(from) ||
if (map->is_down(from) ||
(map->get_cluster_addr(from) != m->get_source_inst().addr)) {
dout(5) << "from dead osd." << from << ", marking down, "
<< " msg was " << m->get_source_inst().addr
<< " expected " << (map->have_inst(from) ?
<< " expected " << (map->is_up(from) ?
map->get_cluster_addr(from) : entity_addr_t())
<< dendl;
ConnectionRef con = m->get_connection();

View File

@ -460,9 +460,6 @@ public:
return identify_osd(addr) >= 0;
}
int find_osd_on_ip(const entity_addr_t& ip) const;
bool have_inst(int osd) const {
return exists(osd) && is_up(osd);
}
const entity_addr_t &get_addr(int osd) const {
assert(exists(osd));
return osd_addrs->client_addr[osd] ? *osd_addrs->client_addr[osd] : osd_addrs->blank;