]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon: pass addrvec via MMonJoin
authorSage Weil <sage@redhat.com>
Tue, 10 Jul 2018 19:37:25 +0000 (14:37 -0500)
committerSage Weil <sage@redhat.com>
Fri, 21 Dec 2018 21:31:32 +0000 (15:31 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/messages/MMonJoin.h
src/mon/Monitor.cc
src/mon/MonmapMonitor.cc
src/test/mon/test-mon-msg.cc

index 8a65f27a8305a849015533d52eb241cf8449b777..2879f549b773ad5cefa2c161f5568346531477ec 100644 (file)
@@ -24,14 +24,17 @@ class MMonJoin : public MessageInstance<MMonJoin, PaxosServiceMessage> {
 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);
+    }
   }
 };
 
index 660052713fcf60913002b6452fb89fb4cc554abd..def920c9bdece410c6f56c6c07033f9e0f059b5c 100644 (file)
@@ -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());
   }
 }
index dbdc66f778cd7717fbcd10489904de6512be849e..43f373cdec141f9894656c42185cf6e912671084 100644 (file)
@@ -747,7 +747,7 @@ reply:
 bool MonmapMonitor::preprocess_join(MonOpRequestRef op)
 {
   MMonJoin *join = static_cast<MMonJoin*>(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<MMonJoin*>(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;
 }
index 7993fc5f0d74a05ab83bd2e4ecf43d0e13e33d53..5585b831258f0c4f0b0787fec7a4b69e57d20c92 100644 (file)
@@ -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();