From fe6633172ea10b9f95c6d59bccdac01651195f25 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Wed, 26 Jun 2013 18:55:26 -0700 Subject: [PATCH] Handle non-existent front interface in maps from older MONs Fix OSDService::get_con_osd_hb() to not try to get_connection() without front interface Fix OSD::handle_osd_map() to check for missing front interface Fixes: #5460 Signed-off-by: David Zafman Reviewed-by: Sage Weil --- src/osd/OSD.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 57d6d7245c6f0..bab345324d025 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3561,7 +3561,8 @@ pair OSDService::get_con_osd_hb(int peer, epoch_t f return ret; } ret.first = osd->hbclient_messenger->get_connection(next_osdmap->get_hb_back_inst(peer)); - ret.second = osd->hbclient_messenger->get_connection(next_osdmap->get_hb_front_inst(peer)); + if (next_osdmap->get_hb_front_addr(peer) != entity_addr_t()) + ret.second = osd->hbclient_messenger->get_connection(next_osdmap->get_hb_front_inst(peer)); return ret; } @@ -4969,7 +4970,8 @@ void OSD::handle_osd_map(MOSDMap *m) !osdmap->get_addr(whoami).probably_equals(client_messenger->get_myaddr()) || !osdmap->get_cluster_addr(whoami).probably_equals(cluster_messenger->get_myaddr()) || !osdmap->get_hb_back_addr(whoami).probably_equals(hb_back_server_messenger->get_myaddr()) || - !osdmap->get_hb_front_addr(whoami).probably_equals(hb_front_server_messenger->get_myaddr())) { + (osdmap->get_hb_front_addr(whoami) != entity_addr_t() && + !osdmap->get_hb_front_addr(whoami).probably_equals(hb_front_server_messenger->get_myaddr()))) { if (!osdmap->is_up(whoami)) { if (service.is_preparing_to_stop()) { service.got_stop_ack(); @@ -4990,7 +4992,8 @@ void OSD::handle_osd_map(MOSDMap *m) clog.error() << "map e" << osdmap->get_epoch() << " had wrong hb back addr (" << osdmap->get_hb_back_addr(whoami) << " != my " << hb_back_server_messenger->get_myaddr() << ")"; - else if (!osdmap->get_hb_front_addr(whoami).probably_equals(hb_front_server_messenger->get_myaddr())) + else if (osdmap->get_hb_front_addr(whoami) != entity_addr_t() && + !osdmap->get_hb_front_addr(whoami).probably_equals(hb_front_server_messenger->get_myaddr())) clog.error() << "map e" << osdmap->get_epoch() << " had wrong hb front addr (" << osdmap->get_hb_front_addr(whoami) << " != my " << hb_front_server_messenger->get_myaddr() << ")"; -- 2.39.5