From: Sage Weil Date: Tue, 10 Jul 2018 19:37:25 +0000 (-0500) Subject: mon: pass addrvec via MMonJoin X-Git-Tag: v14.1.0~484^2~96 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=611c1c126dacc86fb9ef5f076ad992397a603b39;p=ceph.git mon: pass addrvec via MMonJoin Signed-off-by: Sage Weil --- diff --git a/src/messages/MMonJoin.h b/src/messages/MMonJoin.h index 8a65f27a8305..2879f549b773 100644 --- a/src/messages/MMonJoin.h +++ b/src/messages/MMonJoin.h @@ -24,14 +24,17 @@ class MMonJoin : public MessageInstance { public: friend factory; + static constexpr int HEAD_VERSION = 2; + static constexpr int COMPAT_VERSION = 2; + uuid_d fsid; string name; - entity_addr_t addr; + entity_addrvec_t addrs; - MMonJoin() : MessageInstance(MSG_MON_JOIN, 0) {} - MMonJoin(uuid_d &f, string n, const entity_addr_t& a) - : MessageInstance(MSG_MON_JOIN, 0), - fsid(f), name(n), addr(a) + MMonJoin() : MessageInstance(MSG_MON_JOIN, 0, HEAD_VERSION, COMPAT_VERSION) {} + MMonJoin(uuid_d &f, string n, const entity_addrvec_t& av) + : MessageInstance(MSG_MON_JOIN, 0, HEAD_VERSION, COMPAT_VERSION), + fsid(f), name(n), addrs(av) { } private: @@ -40,7 +43,7 @@ private: public: const char *get_type_name() const override { return "mon_join"; } void print(ostream& o) const override { - o << "mon_join(" << name << " " << addr << ")"; + o << "mon_join(" << name << " " << addrs << ")"; } void encode_payload(uint64_t features) override { @@ -48,14 +51,28 @@ public: paxos_encode(); encode(fsid, payload); encode(name, payload); - encode(addr, payload, features); + if (HAVE_FEATURE(features, SERVER_NAUTILUS)) { + header.version = HEAD_VERSION; + header.compat_version = COMPAT_VERSION; + encode(addrs, payload, features); + } else { + header.version = 1; + header.compat_version = 1; + encode(addrs.legacy_addr(), payload, features); + } } void decode_payload() override { auto p = payload.cbegin(); paxos_decode(p); decode(fsid, p); decode(name, p); - decode(addr, p); + if (header.version == 1) { + entity_addr_t addr; + decode(addr, p); + addrs = entity_addrvec_t(addr); + } else { + decode(addrs, p); + } } }; diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 660052713fcf..def920c9bdec 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -1898,7 +1898,7 @@ void Monitor::handle_probe_reply(MonOpRequestRef op) } else { dout(10) << " ready to join, but i'm not in the monmap or my addr is blank, trying to join" << dendl; send_mon_message( - new MMonJoin(monmap->fsid, name, messenger->get_myaddr()), + new MMonJoin(monmap->fsid, name, messenger->get_myaddrs()), *m->quorum.begin()); } } else { @@ -2158,7 +2158,7 @@ void Monitor::finish_election() if (cur_name != name) { dout(10) << " renaming myself from " << cur_name << " -> " << name << dendl; send_mon_message( - new MMonJoin(monmap->fsid, name, messenger->get_myaddr()), + new MMonJoin(monmap->fsid, name, messenger->get_myaddrs()), *quorum.begin()); } } diff --git a/src/mon/MonmapMonitor.cc b/src/mon/MonmapMonitor.cc index dbdc66f778cd..43f373cdec14 100644 --- a/src/mon/MonmapMonitor.cc +++ b/src/mon/MonmapMonitor.cc @@ -747,7 +747,7 @@ reply: bool MonmapMonitor::preprocess_join(MonOpRequestRef op) { MMonJoin *join = static_cast(op->get_req()); - dout(10) << __func__ << " " << join->name << " at " << join->addr << dendl; + dout(10) << __func__ << " " << join->name << " at " << join->addrs << dendl; MonSession *session = op->get_session(); if (!session || @@ -756,12 +756,14 @@ bool MonmapMonitor::preprocess_join(MonOpRequestRef op) return true; } - if (pending_map.contains(join->name) && !pending_map.get_addr(join->name).is_blank_ip()) { + if (pending_map.contains(join->name) && + !pending_map.get_addr(join->name).is_blank_ip()) { dout(10) << " already have " << join->name << dendl; return true; } - if (pending_map.contains(join->addr) && pending_map.get_name(join->addr) == join->name) { - dout(10) << " already have " << join->addr << dendl; + if (pending_map.contains(join->addrs) && + pending_map.get_name(join->addrs) == join->name) { + dout(10) << " already have " << join->addrs << dendl; return true; } return false; @@ -769,12 +771,13 @@ bool MonmapMonitor::preprocess_join(MonOpRequestRef op) bool MonmapMonitor::prepare_join(MonOpRequestRef op) { MMonJoin *join = static_cast(op->get_req()); - dout(0) << "adding/updating " << join->name << " at " << join->addr << " to monitor cluster" << dendl; + dout(0) << "adding/updating " << join->name + << " at " << join->addrs << " to monitor cluster" << dendl; if (pending_map.contains(join->name)) pending_map.remove(join->name); - if (pending_map.contains(join->addr)) - pending_map.remove(pending_map.get_name(join->addr)); - pending_map.add(join->name, join->addr); + if (pending_map.contains(join->addrs)) + pending_map.remove(pending_map.get_name(join->addrs)); + pending_map.add(join->name, join->addrs); pending_map.last_changed = ceph_clock_now(); return true; } diff --git a/src/test/mon/test-mon-msg.cc b/src/test/mon/test-mon-msg.cc index 7993fc5f0d74..5585b831258f 100644 --- a/src/test/mon/test-mon-msg.cc +++ b/src/test/mon/test-mon-msg.cc @@ -314,7 +314,7 @@ TEST_F(MonMsgTest, MRouteTest) TEST_F(MonMsgTest, MMonJoin) { Message *m = new MMonJoin(get_monmap()->fsid, string("client"), - msg->get_myaddr()); + msg->get_myaddrs()); send_wait_reply(m, MSG_MON_PAXOS, 10.0); int r = monc.get_monmap();