]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: include cluster fsid in MMgrBeacon
authorSage Weil <sage@redhat.com>
Tue, 7 Mar 2017 21:10:54 +0000 (16:10 -0500)
committerSage Weil <sage@redhat.com>
Wed, 29 Mar 2017 15:39:26 +0000 (11:39 -0400)
Prevent ceph-mgr from talking to the wrong cluster!

Signed-off-by: Sage Weil <sage@redhat.com>
src/messages/MMgrBeacon.h
src/mgr/MgrStandby.cc

index a07ba97f8f65d9ca5c494703840adf3939f9166f..2962d9c9a1f9149f85b04bf7e89a349cd22cfa51 100644 (file)
@@ -22,7 +22,7 @@
 
 class MMgrBeacon : public PaxosServiceMessage {
 
-  static const int HEAD_VERSION = 1;
+  static const int HEAD_VERSION = 2;
   static const int COMPAT_VERSION = 1;
 
 protected:
@@ -30,6 +30,7 @@ protected:
   entity_addr_t server_addr;
   bool available;
   std::string name;
+  uuid_d fsid;
 
 public:
   MMgrBeacon()
@@ -38,10 +39,11 @@ public:
   {
   }
 
-  MMgrBeacon(uint64_t gid_, const std::string &name_,
+  MMgrBeacon(const uuid_d& fsid_, uint64_t gid_, const std::string &name_,
              entity_addr_t server_addr_, bool available_)
     : PaxosServiceMessage(MSG_MGR_BEACON, 0, HEAD_VERSION, COMPAT_VERSION),
-      gid(gid_), server_addr(server_addr_), available(available_), name(name_)
+      gid(gid_), server_addr(server_addr_), available(available_), name(name_),
+      fsid(fsid_)
   {
   }
 
@@ -49,6 +51,7 @@ public:
   entity_addr_t get_server_addr() const { return server_addr; }
   bool get_available() const { return available; }
   const std::string& get_name() const { return name; }
+  const uuid_d& get_fsid() const { return fsid; }
 
 private:
   ~MMgrBeacon() override {}
@@ -58,8 +61,8 @@ public:
   const char *get_type_name() const override { return "mgrbeacon"; }
 
   void print(ostream& out) const override {
-    out << get_type_name() << " mgr." << name << "(" << gid << ", "
-        << server_addr << ", " << available << ")";
+    out << get_type_name() << " mgr." << name << "(" << fsid << ","
+       << gid << ", " << server_addr << ", " << available << ")";
   }
 
   void encode_payload(uint64_t features) override {
@@ -68,6 +71,7 @@ public:
     ::encode(gid, payload);
     ::encode(available, payload);
     ::encode(name, payload);
+    ::encode(fsid, payload);
   }
   void decode_payload() override {
     bufferlist::iterator p = payload.begin();
@@ -76,6 +80,9 @@ public:
     ::decode(gid, p);
     ::decode(available, p);
     ::decode(name, p);
+    if (header.version >= 2) {
+      ::decode(fsid, p);
+    }
   }
 };
 
index 8e460e1ac982e86fc33bb906f3eecb7846c6d904..0d7034b5b7782cf51f79698cbda2e4e8ac4ac110 100644 (file)
@@ -112,7 +112,8 @@ void MgrStandby::send_beacon()
 
   bool available = active_mgr != nullptr && active_mgr->is_initialized();
   auto addr = available ? active_mgr->get_server_addr() : entity_addr_t();
-  MMgrBeacon *m = new MMgrBeacon(monc->get_global_id(),
+  MMgrBeacon *m = new MMgrBeacon(monc->get_fsid(),
+                                monc->get_global_id(),
                                  g_conf->name.get_id(),
                                  addr,
                                  available);