summaryrefslogtreecommitdiff
path: root/src/messages
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-06-20 19:08:34 -0700
committerSamuel Just <sam.just@inktank.com>2012-06-21 17:10:29 -0700
commit2355b233ea976e7cd31546498e96f44375b845eb (patch)
tree36a798d3e7efb0912dd71112d402dc386db64949 /src/messages
parent2fe9816305fc1406ab7fb043bbb32affffc2d190 (diff)
downloadceph-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.h8
-rw-r--r--src/messages/MMonMap.h10
-rw-r--r--src/messages/MMonProbe.h9
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);