summaryrefslogtreecommitdiff
path: root/src/osd/OSD.cc
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-05-21 17:10:01 -0700
committerSage Weil <sage@inktank.com>2013-05-22 16:13:37 -0700
commit6ad105513940ca4ebb2c44094f47b75bc01c36e9 (patch)
tree2a7da8a148db98253771e67e394d7831e5191455 /src/osd/OSD.cc
parent0262301b3a32620b0c365f5476f234c07e82c48c (diff)
downloadceph-6ad105513940ca4ebb2c44094f47b75bc01c36e9.tar.gz
osd: bind front heartbeat messenger to public_addr
Signed-off-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'src/osd/OSD.cc')
-rw-r--r--src/osd/OSD.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index ab93a800f64..b5a3a5ea309 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -3035,9 +3035,17 @@ void OSD::_send_boot()
hb_back_addr = cluster_addr;
hb_back_addr.set_port(port);
hb_back_server_messenger->set_addr_unknowns(hb_back_addr);
- dout(10) << " assuming hb_addr ip matches cluster_addr" << dendl;
+ dout(10) << " assuming hb_back_addr ip matches cluster_addr" << dendl;
}
- entity_addr_t hb_front_addr;
+ entity_addr_t hb_front_addr = hb_front_server_messenger->get_myaddr();
+ if (hb_front_addr.is_blank_ip()) {
+ int port = hb_front_addr.get_port();
+ hb_front_addr = client_messenger->get_myaddr();
+ hb_front_addr.set_port(port);
+ hb_front_server_messenger->set_addr_unknowns(hb_front_addr);
+ dout(10) << " assuming hb_front_addr ip matches client_addr" << dendl;
+ }
+
MOSDBoot *mboot = new MOSDBoot(superblock, boot_epoch, hb_back_addr, hb_front_addr, cluster_addr);
dout(10) << " client_addr " << client_messenger->get_myaddr()
<< ", cluster_addr " << cluster_addr
@@ -4423,7 +4431,8 @@ void OSD::handle_osd_map(MOSDMap *m)
} else if (!osdmap->is_up(whoami) ||
!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_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())) {
if (!osdmap->is_up(whoami)) {
if (service.is_preparing_to_stop()) {
service.got_stop_ack();
@@ -4444,6 +4453,10 @@ 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()))
+ 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() << ")";
if (!service.is_stopping()) {
state = STATE_BOOTING;
@@ -4462,6 +4475,10 @@ void OSD::handle_osd_map(MOSDMap *m)
if (r != 0)
do_shutdown = true; // FIXME: do_restart?
+ r = hb_front_server_messenger->rebind(hbport);
+ if (r != 0)
+ do_shutdown = true; // FIXME: do_restart?
+
hbclient_messenger->mark_down_all();
reset_heartbeat_peers();