]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: new encoding for pg_create_t
authorSage Weil <sage.weil@dreamhost.com>
Fri, 10 Feb 2012 05:54:34 +0000 (21:54 -0800)
committerSage Weil <sage.weil@dreamhost.com>
Fri, 10 Feb 2012 06:05:57 +0000 (22:05 -0800)
There was no version encoding previously, so this is an incompatible
change.  Fortunately this type is only used in one place, MOSDPGCreate,
so we'll rev that encoding and compensate there.  All is well!

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/messages/MOSDPGCreate.h
src/osd/osd_types.cc

index 38410b99e1df873584b18136da92fa9e9e9fd720..a9b3af74e420760a5e3dae6a725a2baa2a1796b1 100644 (file)
@@ -38,13 +38,30 @@ public:
   const char *get_type_name() const { return "pg_create"; }
 
   void encode_payload(uint64_t features) {
+    header.version = 2;
     ::encode(epoch, payload);
     ::encode(mkpg, payload);
   }
   void decode_payload() {
     bufferlist::iterator p = payload.begin();
     ::decode(epoch, p);
-    ::decode(mkpg, p);
+    if (header.version >= 2) {
+      ::decode(mkpg, p);
+    } else {
+      __u32 n;
+      ::decode(n, p);
+      while (n--) {
+       pg_t pgid;
+       epoch_t created;   // epoch pg created
+       pg_t parent;       // split from parent (if != pg_t())
+       __s32 split_bits;
+       ::decode(pgid, p);
+       ::decode(created, p);
+       ::decode(parent, p);
+       ::decode(split_bits, p);
+       mkpg[pgid] = pg_create_t(created, parent, split_bits);
+      }
+    }
   }
 
   void print(ostream& out) const {
index b79d865163bb97316af23da0d54e0428103d610c..5b4a10de4b8477359d39d9d7f8609d9c66885304 100644 (file)
@@ -1609,16 +1609,20 @@ void pg_missing_t::got(const std::map<hobject_t, pg_missing_t::item>::iterator &
 
 void pg_create_t::encode(bufferlist &bl) const
 {
+  ENCODE_START(1, 1, bl);
   ::encode(created, bl);
   ::encode(parent, bl);
   ::encode(split_bits, bl);
+  ENCODE_FINISH(bl);
 }
 
 void pg_create_t::decode(bufferlist::iterator &bl)
 {
+  DECODE_START(1, bl);
   ::decode(created, bl);
   ::decode(parent, bl);
   ::decode(split_bits, bl);
+  DECODE_FINISH(bl);
 }
 
 void pg_create_t::dump(Formatter *f) const