From f886f31e3c9b163c56ca16b030df5caee58b11d9 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Thu, 31 Jan 2013 13:23:31 -0800 Subject: [PATCH] mds: EExport event uses modern encoding Signed-off-by: Greg Farnum --- src/mds/events/EExport.h | 22 ++++----------------- src/mds/journal.cc | 41 +++++++++++++++++++++++++++++++++++++++ src/test/encoding/types.h | 3 +++ 3 files changed, 48 insertions(+), 18 deletions(-) diff --git a/src/mds/events/EExport.h b/src/mds/events/EExport.h index 3313d17f038c6..534621d044919 100644 --- a/src/mds/events/EExport.h +++ b/src/mds/events/EExport.h @@ -41,24 +41,10 @@ public: out << "EExport " << base << " " << metablob; } - void encode(bufferlist& bl) const { - __u8 struct_v = 2; - ::encode(struct_v, bl); - ::encode(stamp, bl); - ::encode(metablob, bl); - ::encode(base, bl); - ::encode(bounds, bl); - } - void decode(bufferlist::iterator &bl) { - __u8 struct_v; - ::decode(struct_v, bl); - if (struct_v >= 2) - ::decode(stamp, bl); - ::decode(metablob, bl); - ::decode(base, bl); - ::decode(bounds, 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 8e522279d10e7..6c3977584e768 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -1387,6 +1387,47 @@ void EExport::replay(MDS *mds) mds->mdcache->try_trim_non_auth_subtree(dir); } +void EExport::encode(bufferlist& bl) const +{ + ENCODE_START(3, 3, bl); + ::encode(stamp, bl); + ::encode(metablob, bl); + ::encode(base, bl); + ::encode(bounds, bl); + ENCODE_FINISH(bl); +} + +void EExport::decode(bufferlist::iterator &bl) +{ + DECODE_START_LEGACY_COMPAT_LEN(3, 3, 3, bl); + if (struct_v >= 2) + ::decode(stamp, bl); + ::decode(metablob, bl); + ::decode(base, bl); + ::decode(bounds, bl); + DECODE_FINISH(bl); +} + +void EExport::dump(Formatter *f) const +{ + f->dump_float("stamp", (double)stamp); + /*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_stream("base dirfrag") << base; + f->open_array_section("bounds dirfrags"); + for (set::const_iterator i = bounds.begin(); + i != bounds.end(); ++i) { + f->dump_stream("dirfrag") << *i; + } + f->close_section(); // bounds dirfrags +} + +void EExport::generate_test_instances(list& ls) +{ + EExport *sample = new EExport(); + ls.push_back(sample); +} // ----------------------- diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h index 68fd7af2cc0ae..b9edfd5b53873 100644 --- a/src/test/encoding/types.h +++ b/src/test/encoding/types.h @@ -126,6 +126,9 @@ TYPE(AnchorServer) #include "mds/events/ECommitted.h" TYPE(ECommitted) +#include "mds/events/EExport.h" +TYPE(EExport) + #ifdef WITH_RADOSGW #include "rgw/rgw_rados.h" -- 2.39.5