From: Greg Farnum Date: Thu, 31 Jan 2013 21:44:37 +0000 (-0800) Subject: mds: EFragment event uses modern encoding X-Git-Tag: v0.58~100^2~37 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b079733b826999a25ef8011afc11d080eacbb475;p=ceph.git mds: EFragment event uses modern encoding Signed-off-by: Greg Farnum --- diff --git a/src/mds/events/EFragment.h b/src/mds/events/EFragment.h index 3c9a93b549d..5524de7827e 100644 --- a/src/mds/events/EFragment.h +++ b/src/mds/events/EFragment.h @@ -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& ls); void replay(MDS *mds); }; diff --git a/src/mds/journal.cc b/src/mds/journal.cc index f828571e414..23142599f05 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -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& ls) +{ + ls.push_back(new EFragment); + ls.push_back(new EFragment); + ls.back()->op = OP_PREPARE; + ls.back()->ino = 1; + ls.back()->bits = 5; +} diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h index b9edfd5b538..a7fe3f6d257 100644 --- a/src/test/encoding/types.h +++ b/src/test/encoding/types.h @@ -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