From 607b43a092d040dd861455f7d18ac8da41ecbdd9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 7 Mar 2017 16:10:54 -0500 Subject: [PATCH] mgr: include cluster fsid in MMgrBeacon Prevent ceph-mgr from talking to the wrong cluster! Signed-off-by: Sage Weil --- src/messages/MMgrBeacon.h | 17 ++++++++++++----- src/mgr/MgrStandby.cc | 3 ++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/messages/MMgrBeacon.h b/src/messages/MMgrBeacon.h index a07ba97f8f65d..2962d9c9a1f91 100644 --- a/src/messages/MMgrBeacon.h +++ b/src/messages/MMgrBeacon.h @@ -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); + } } }; diff --git a/src/mgr/MgrStandby.cc b/src/mgr/MgrStandby.cc index 8e460e1ac982e..0d7034b5b7782 100644 --- a/src/mgr/MgrStandby.cc +++ b/src/mgr/MgrStandby.cc @@ -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); -- 2.39.5