]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: EFragment event uses modern encoding
authorGreg Farnum <greg@inktank.com>
Thu, 31 Jan 2013 21:44:37 +0000 (13:44 -0800)
committerGreg Farnum <greg@inktank.com>
Fri, 8 Feb 2013 21:17:52 +0000 (13:17 -0800)
Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/events/EFragment.h
src/mds/journal.cc
src/test/encoding/types.h

index 3c9a93b549d27fdb388506b17ecbe009638ed97b..5524de7827eeb24d9c7c6ba8d486785309c31f9f 100644 (file)
@@ -40,7 +40,7 @@ public:
     OP_ROLLBACK = 3,
     OP_ONESHOT = 4,  // (legacy) PREPARE+COMMIT
   };
-  const char *op_name(int o) {
+  const char *op_name(int o) const {
     switch (o) {
     case OP_PREPARE: return "prepare";
     case OP_COMMIT: return "commit";
@@ -49,31 +49,10 @@ public:
     }
   }
 
-  void encode(bufferlist &bl) const {
-    __u8 struct_v = 3;
-    ::encode(struct_v, bl);
-    ::encode(stamp, bl);
-    ::encode(op, bl);
-    ::encode(ino, bl);
-    ::encode(basefrag, bl);
-    ::encode(bits, bl);
-    ::encode(metablob, bl);
-  } 
-  void decode(bufferlist::iterator &bl) {
-    __u8 struct_v;
-    ::decode(struct_v, bl);
-    if (struct_v >= 2)
-      ::decode(stamp, bl);
-    if (struct_v >= 3)
-      ::decode(op, bl);
-    else
-      op = OP_ONESHOT;
-    ::decode(ino, bl);
-    ::decode(basefrag, bl);
-    ::decode(bits, bl);
-    ::decode(metablob, bl);
-  }
-
+  void encode(bufferlist &bl) const;
+  void decode(bufferlist::iterator &bl);
+  void dump(Formatter *f) const;
+  static void generate_test_instances(list<EFragment*>& ls);
   void replay(MDS *mds);
 };
 
index f828571e414a7f738e8bc158418d46a69eae1b5c..23142599f05b3ce9509f5540931f273b62b81c3e 100644 (file)
@@ -1343,6 +1343,51 @@ void EFragment::replay(MDS *mds)
     in->verify_dirfrags();
 }
 
+void EFragment::encode(bufferlist &bl) const {
+  ENCODE_START(4, 4, bl);
+  ::encode(stamp, bl);
+  ::encode(op, bl);
+  ::encode(ino, bl);
+  ::encode(basefrag, bl);
+  ::encode(bits, bl);
+  ::encode(metablob, bl);
+  ENCODE_FINISH(bl);
+}
+
+void EFragment::decode(bufferlist::iterator &bl) {
+  DECODE_START_LEGACY_COMPAT_LEN(4, 4, 4, bl);
+  if (struct_v >= 2)
+    ::decode(stamp, bl);
+  if (struct_v >= 3)
+    ::decode(op, bl);
+  else
+    op = OP_ONESHOT;
+  ::decode(ino, bl);
+  ::decode(basefrag, bl);
+  ::decode(bits, bl);
+  ::decode(metablob, bl);
+  DECODE_FINISH(bl);
+}
+
+void EFragment::dump(Formatter *f) const
+{
+  /*f->open_object_section("Metablob");
+  metablob.dump(f); // sadly we don't have this; dunno if we'll get it
+  f->close_section();*/
+  f->dump_string("op", op_name(op));
+  f->dump_stream("ino") << ino;
+  f->dump_stream("base frag") << basefrag;
+  f->dump_int("bits", bits);
+}
+
+void EFragment::generate_test_instances(list<EFragment*>& ls)
+{
+  ls.push_back(new EFragment);
+  ls.push_back(new EFragment);
+  ls.back()->op = OP_PREPARE;
+  ls.back()->ino = 1;
+  ls.back()->bits = 5;
+}
 
 
 
index b9edfd5b53873c77e9a4690e8b360d35c56be0ac..a7fe3f6d257f83479770f71ea2a7715e99fb3b3a 100644 (file)
@@ -125,9 +125,10 @@ TYPE(AnchorServer)
 
 #include "mds/events/ECommitted.h"
 TYPE(ECommitted)
-
 #include "mds/events/EExport.h"
 TYPE(EExport)
+#include "mds/events/EFragment.h"
+TYPE(EFragment)
 
 #ifdef WITH_RADOSGW