diff --git a/src/messages/MMDSBeacon.h b/src/messages/MMDSBeacon.h index 727aaad71474e..a4d9d9b30a5f9 100644 --- a/src/messages/MMDSBeacon.h +++ b/src/messages/MMDSBeacon.h @@ -122,7 +122,7 @@ WRITE_CLASS_ENCODER(MDSHealth) class MMDSBeacon : public PaxosServiceMessage { - static const int HEAD_VERSION = 6; + static const int HEAD_VERSION = 7; static const int COMPAT_VERSION = 2; uuid_d fsid; @@ -135,6 +135,7 @@ class MMDSBeacon : public PaxosServiceMessage { mds_rank_t standby_for_rank; string standby_for_name; fs_cluster_id_t standby_for_fscid; + bool standby_replay; CompatSet compat; @@ -150,7 +151,7 @@ class MMDSBeacon : public PaxosServiceMessage { PaxosServiceMessage(MSG_MDS_BEACON, les, HEAD_VERSION, COMPAT_VERSION), fsid(f), global_id(g), name(n), state(st), seq(se), standby_for_rank(MDS_RANK_NONE), standby_for_fscid(FS_CLUSTER_ID_NONE), - mds_features(feat) { + standby_replay(false), mds_features(feat) { } private: ~MMDSBeacon() {} @@ -166,6 +167,7 @@ class MMDSBeacon : public PaxosServiceMessage { mds_rank_t get_standby_for_rank() { return standby_for_rank; } const string& get_standby_for_name() { return standby_for_name; } const fs_cluster_id_t& get_standby_for_fscid() { return standby_for_fscid; } + bool get_standby_replay() const { return standby_replay; } uint64_t get_mds_features() const { return mds_features; } CompatSet const& get_compat() const { return compat; } @@ -178,6 +180,7 @@ class MMDSBeacon : public PaxosServiceMessage { void set_standby_for_name(string& n) { standby_for_name = n; } void set_standby_for_name(const char* c) { standby_for_name.assign(c); } void set_standby_for_fscid(fs_cluster_id_t f) { standby_for_fscid = f; } + void set_standby_replay(bool r) { standby_replay = r; } const map& get_sys_info() const { return sys_info; } void set_sys_info(const map& i) { sys_info = i; } @@ -203,6 +206,7 @@ class MMDSBeacon : public PaxosServiceMessage { } ::encode(mds_features, payload); ::encode(standby_for_fscid, payload); + ::encode(standby_replay, payload); } void decode_payload() { bufferlist::iterator p = payload.begin(); @@ -229,6 +233,16 @@ class MMDSBeacon : public PaxosServiceMessage { if (header.version >= 6) { ::decode(standby_for_fscid, p); } + if (header.version >= 7) { + ::decode(standby_replay, p); + } + + if (header.version < 7 && state == MDSMap::STATE_STANDBY_REPLAY) { + // Old MDS daemons request the state, instead of explicitly + // advertising that they are configured as a replay daemon. + standby_replay = true; + state = MDSMap::STATE_STANDBY; + } } };