From 0262301b3a32620b0c365f5476f234c07e82c48c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 21 May 2013 16:44:00 -0700 Subject: [PATCH] osd: send hb front addr to monitor at boot We still aren't binding it to anything yet, or putting it in the OSDMap. Signed-off-by: Sage Weil --- src/messages/MOSDBoot.h | 19 +++++++++++++------ src/mon/OSDMonitor.cc | 8 ++++++-- src/osd/OSD.cc | 18 ++++++++++-------- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/src/messages/MOSDBoot.h b/src/messages/MOSDBoot.h index 354ea6b04303a..d18d56c66f0e0 100644 --- a/src/messages/MOSDBoot.h +++ b/src/messages/MOSDBoot.h @@ -22,12 +22,12 @@ class MOSDBoot : public PaxosServiceMessage { - static const int HEAD_VERSION = 3; + static const int HEAD_VERSION = 4; static const int COMPAT_VERSION = 2; public: OSDSuperblock sb; - entity_addr_t hb_addr; + entity_addr_t hb_back_addr, hb_front_addr; entity_addr_t cluster_addr; epoch_t boot_epoch; // last epoch this daemon was added to the map (if any) @@ -35,11 +35,15 @@ class MOSDBoot : public PaxosServiceMessage { : PaxosServiceMessage(MSG_OSD_BOOT, 0, HEAD_VERSION, COMPAT_VERSION), boot_epoch(0) { } - MOSDBoot(OSDSuperblock& s, epoch_t be, const entity_addr_t& hb_addr_ref, + MOSDBoot(OSDSuperblock& s, epoch_t be, + const entity_addr_t& hb_back_addr_ref, + const entity_addr_t& hb_front_addr_ref, const entity_addr_t& cluster_addr_ref) : PaxosServiceMessage(MSG_OSD_BOOT, s.current_epoch, HEAD_VERSION, COMPAT_VERSION), sb(s), - hb_addr(hb_addr_ref), cluster_addr(cluster_addr_ref), + hb_back_addr(hb_back_addr_ref), + hb_front_addr(hb_front_addr_ref), + cluster_addr(cluster_addr_ref), boot_epoch(be) { } @@ -55,19 +59,22 @@ public: void encode_payload(uint64_t features) { paxos_encode(); ::encode(sb, payload); - ::encode(hb_addr, payload); + ::encode(hb_back_addr, payload); ::encode(cluster_addr, payload); ::encode(boot_epoch, payload); + ::encode(hb_front_addr, payload); } void decode_payload() { bufferlist::iterator p = payload.begin(); paxos_decode(p); ::decode(sb, p); - ::decode(hb_addr, p); + ::decode(hb_back_addr, p); if (header.version >= 2) ::decode(cluster_addr, p); if (header.version >= 3) ::decode(boot_epoch, p); + if (header.version >= 4) + ::decode(hb_front_addr, p); } }; diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index ec89c24a5c78c..dd149e47eee4b 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1090,7 +1090,9 @@ bool OSDMonitor::preprocess_boot(MOSDBoot *m) bool OSDMonitor::prepare_boot(MOSDBoot *m) { dout(7) << "prepare_boot from " << m->get_orig_source_inst() << " sb " << m->sb - << " cluster_addr " << m->cluster_addr << " hb_addr " << m->hb_addr + << " cluster_addr " << m->cluster_addr + << " hb_back_addr " << m->hb_back_addr + << " hb_front_addr " << m->hb_front_addr << dendl; assert(m->get_orig_source().is_osd()); @@ -1127,7 +1129,9 @@ bool OSDMonitor::prepare_boot(MOSDBoot *m) pending_inc.new_up_client[from] = m->get_orig_source_addr(); if (!m->cluster_addr.is_blank_ip()) pending_inc.new_up_cluster[from] = m->cluster_addr; - pending_inc.new_hb_back_up[from] = m->hb_addr; + pending_inc.new_hb_back_up[from] = m->hb_back_addr; + if (!m->hb_front_addr.is_blank_ip()) + pending_inc.new_hb_front_up[from] = m->hb_front_addr; // mark in? if ((g_conf->mon_osd_auto_mark_auto_out_in && (oldstate & CEPH_OSD_AUTOOUT)) || diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index c672104a73007..ab93a800f6458 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3029,18 +3029,20 @@ void OSD::_send_boot() cluster_messenger->set_addr_unknowns(cluster_addr); dout(10) << " assuming cluster_addr ip matches client_addr" << dendl; } - entity_addr_t hb_addr = hbserver_messenger->get_myaddr(); - if (hb_addr.is_blank_ip()) { - int port = hb_addr.get_port(); - hb_addr = cluster_addr; - hb_addr.set_port(port); - hbserver_messenger->set_addr_unknowns(hb_addr); + entity_addr_t hb_back_addr = hb_back_server_messenger->get_myaddr(); + if (hb_back_addr.is_blank_ip()) { + int port = hb_back_addr.get_port(); + 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; } - MOSDBoot *mboot = new MOSDBoot(superblock, boot_epoch, hb_addr, cluster_addr); + entity_addr_t hb_front_addr; + 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 - << ", hb addr " << hb_addr + << ", hb_back_addr " << hb_back_addr + << ", hb_front_addr " << hb_front_addr << dendl; monc->send_mon_message(mboot); } -- 2.39.5