We still aren't binding it to anything yet, or putting it in the OSDMap.
Signed-off-by: Sage Weil <sage@inktank.com>
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)
: 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)
{ }
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);
}
};
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());
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)) ||
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);
}