]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
monmap: new encoder
authorSage Weil <sage@inktank.com>
Tue, 15 May 2012 04:15:52 +0000 (21:15 -0700)
committerSage Weil <sage@inktank.com>
Tue, 15 May 2012 04:15:52 +0000 (21:15 -0700)
Introduce a feature bit so that we can interoperate with older
peers.

Signed-off-by: Sage Weil <sage@inktank.com>
src/include/ceph_features.h
src/mon/MonMap.cc

index 63db57aea489a87d07f5edc14dec7a1a9bf4228a..8791f475480c8ec467d7ce13f0e710dc5670ed1e 100644 (file)
@@ -19,6 +19,7 @@
 #define CEPH_FEATURE_OSDREPLYMUX    (1<<12)
 #define CEPH_FEATURE_OSDENC         (1<<13)
 #define CEPH_FEATURE_OMAP           (1<<14)
+#define CEPH_FEATURE_MONENC         (1<<15)
 
 /*
  * Features supported.  Should be everything above.
@@ -38,6 +39,7 @@
         CEPH_FEATURE_PGPOOL3 |          \
         CEPH_FEATURE_OSDREPLYMUX |      \
         CEPH_FEATURE_OSDENC |           \
-        CEPH_FEATURE_OMAP)
+        CEPH_FEATURE_OMAP |             \
+        CEPH_FEATURE_MONENC)
 
 #endif
index ca5f40ea28b42b66a7bb28deb181aa5de74056a2..c51aa69e9c4a1ab23f73313afa483de46a740e74 100644 (file)
@@ -27,22 +27,31 @@ void MonMap::encode(bufferlist& blist, uint64_t features) const
     return;
   }
 
-  __u16 v = 2;
-  ::encode(v, blist);
+  if ((features & CEPH_FEATURE_MONENC) == 0) {
+    __u16 v = 2;
+    ::encode(v, blist);
+    ::encode_raw(fsid, blist);
+    ::encode(epoch, blist);
+    ::encode(mon_addr, blist);
+    ::encode(last_changed, blist);
+    ::encode(created, blist);
+  }
+
+  ENCODE_START(3, 3, blist);
   ::encode_raw(fsid, blist);
   ::encode(epoch, blist);
   ::encode(mon_addr, blist);
   ::encode(last_changed, blist);
   ::encode(created, blist);
+  ENCODE_FINISH(blist);
 }
 
 void MonMap::decode(bufferlist::iterator &p)
 {
-  __u16 v;
-  ::decode(v, p);
+  DECODE_START_LEGACY_COMPAT_LEN(3, 3, 3, p);
   ::decode_raw(fsid, p);
   ::decode(epoch, p);
-  if (v == 1) {
+  if (struct_v == 1) {
     vector<entity_inst_t> mon_inst;
     ::decode(mon_inst, p);
     for (unsigned i = 0; i < mon_inst.size(); i++) {
@@ -52,10 +61,12 @@ void MonMap::decode(bufferlist::iterator &p)
       string name = n;
       mon_addr[name] = mon_inst[i].addr;
     }
-  } else
+  } else {
     ::decode(mon_addr, p);
+  }
   ::decode(last_changed, p);
   ::decode(created, p);
+  DECODE_FINISH(p);
   calc_ranks();
 }