1
0
mirror of https://github.com/ceph/ceph synced 2025-04-01 23:02:17 +00:00

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 <sage@inktank.com>
This commit is contained in:
Sage Weil 2013-05-21 16:44:00 -07:00
parent da1940a21c
commit 0262301b3a
3 changed files with 29 additions and 16 deletions

View File

@ -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);
}
};

View File

@ -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)) ||

View File

@ -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);
}