diff options
author | Sage Weil <sage@inktank.com> | 2012-06-20 19:08:34 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2012-06-21 17:10:29 -0700 |
commit | 2355b233ea976e7cd31546498e96f44375b845eb (patch) | |
tree | 36a798d3e7efb0912dd71112d402dc386db64949 /src/messages | |
parent | 2fe9816305fc1406ab7fb043bbb32affffc2d190 (diff) | |
download | ceph-2355b233ea976e7cd31546498e96f44375b845eb.tar.gz |
mon: conditionally encode old monmap when peer lacks feature
This allows a rolling upgrade from 0.47.2 to 0.48.
Signed-off-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'src/messages')
-rw-r--r-- | src/messages/MMonElection.h | 8 | ||||
-rw-r--r-- | src/messages/MMonMap.h | 10 | ||||
-rw-r--r-- | src/messages/MMonProbe.h | 9 |
3 files changed, 27 insertions, 0 deletions
diff --git a/src/messages/MMonElection.h b/src/messages/MMonElection.h index b35cbd566b5..e9dcfcb8c6c 100644 --- a/src/messages/MMonElection.h +++ b/src/messages/MMonElection.h @@ -60,6 +60,14 @@ public: } void encode_payload(uint64_t features) { + if (monmap_bl.length() && (features & CEPH_FEATURE_MONENC) == 0) { + // reencode old-format monmap + MonMap t; + t.decode(monmap_bl); + monmap_bl.clear(); + t.encode(monmap_bl, features); + } + ::encode(fsid, payload); ::encode(op, payload); ::encode(epoch, payload); diff --git a/src/messages/MMonMap.h b/src/messages/MMonMap.h index a314594752f..3e950fa6f63 100644 --- a/src/messages/MMonMap.h +++ b/src/messages/MMonMap.h @@ -15,7 +15,9 @@ #ifndef CEPH_MMONMAP_H #define CEPH_MMONMAP_H +#include "include/ceph_features.h" #include "msg/Message.h" +#include "mon/MonMap.h" class MMonMap : public Message { public: @@ -32,6 +34,14 @@ public: const char *get_type_name() const { return "mon_map"; } void encode_payload(uint64_t features) { + if (monmapbl.length() && (features & CEPH_FEATURE_MONENC) == 0) { + // reencode old-format monmap + MonMap t; + t.decode(monmapbl); + monmapbl.clear(); + t.encode(monmapbl, features); + } + ::encode(monmapbl, payload); } void decode_payload() { diff --git a/src/messages/MMonProbe.h b/src/messages/MMonProbe.h index 72144ab0f18..e7ea1193731 100644 --- a/src/messages/MMonProbe.h +++ b/src/messages/MMonProbe.h @@ -16,6 +16,7 @@ #ifndef CEPH_MMONPROBE_H #define CEPH_MMONPROBE_H +#include "include/ceph_features.h" #include "msg/Message.h" #include "mon/MonMap.h" @@ -81,6 +82,14 @@ public: } void encode_payload(uint64_t features) { + if (monmap_bl.length() && (features & CEPH_FEATURE_MONENC) == 0) { + // reencode old-format monmap + MonMap t; + t.decode(monmap_bl); + monmap_bl.clear(); + t.encode(monmap_bl, features); + } + ::encode(fsid, payload); ::encode(op, payload); ::encode(name, payload); |