From: John Spray Date: Thu, 24 Mar 2016 13:13:55 +0000 (+0000) Subject: messages: add MMDSBeacon::standby_replay X-Git-Tag: v11.0.0~711^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cdf8a29f81475a000824ce8942f02d9d570ec3bb;p=ceph.git messages: add MMDSBeacon::standby_replay So that daemons can explicitly say that they want to be standby replay, instead of using magic standby_for_rank values. Because in some cases daemons would indicate this with a beacon requesting STANDBY_REPLAY state, we also munge these during decode to be normal STANDBY requests with standby_replay=true. Signed-off-by: John Spray --- diff --git a/src/messages/MMDSBeacon.h b/src/messages/MMDSBeacon.h index 727aaad71474..a4d9d9b30a5f 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 @@ public: 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 @@ public: 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 @@ public: } ::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 @@ public: 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; + } } };