From: Greg Farnum Date: Mon, 4 Feb 2013 04:47:06 +0000 (-0800) Subject: mds: ESubtreeMap more modernization for dencoder X-Git-Tag: v0.58~100^2~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d557bcfb3bc0c980f75ec869f2b5add05ee6323e;p=ceph.git mds: ESubtreeMap more modernization for dencoder Signed-off-by: Greg Farnum --- diff --git a/src/mds/events/ESubtreeMap.h b/src/mds/events/ESubtreeMap.h index 72d9a8c315d9..0267a9259826 100644 --- a/src/mds/events/ESubtreeMap.h +++ b/src/mds/events/ESubtreeMap.h @@ -33,27 +33,10 @@ public: << metablob; } - void encode(bufferlist& bl) const { - ENCODE_START(5, 5, bl); - ::encode(stamp, bl); - ::encode(metablob, bl); - ::encode(subtrees, bl); - ::encode(ambiguous_subtrees, bl); - ::encode(expire_pos, bl); - ENCODE_FINISH(bl); - } - void decode(bufferlist::iterator &bl) { - DECODE_START_LEGACY_COMPAT_LEN(5, 5, 5, bl); - if (struct_v >= 2) - ::decode(stamp, bl); - ::decode(metablob, bl); - ::decode(subtrees, bl); - if (struct_v >= 4) - ::decode(ambiguous_subtrees, bl); - if (struct_v >= 3) - ::decode(expire_pos, bl); - DECODE_FINISH(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 15abf0690ab1..7ac8242e4b1c 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -2001,6 +2001,65 @@ void ESlaveUpdate::replay(MDS *mds) // ----------------------- // ESubtreeMap +void ESubtreeMap::encode(bufferlist& bl) const +{ + ENCODE_START(5, 5, bl); + ::encode(stamp, bl); + ::encode(metablob, bl); + ::encode(subtrees, bl); + ::encode(ambiguous_subtrees, bl); + ::encode(expire_pos, bl); + ENCODE_FINISH(bl); +} + +void ESubtreeMap::decode(bufferlist::iterator &bl) +{ + DECODE_START_LEGACY_COMPAT_LEN(5, 5, 5, bl); + if (struct_v >= 2) + ::decode(stamp, bl); + ::decode(metablob, bl); + ::decode(subtrees, bl); + if (struct_v >= 4) + ::decode(ambiguous_subtrees, bl); + if (struct_v >= 3) + ::decode(expire_pos, bl); + DECODE_FINISH(bl); +} + +void ESubtreeMap::dump(Formatter *f) const +{ + f->open_object_section("metablob"); + metablob.dump(f); + f->close_section(); // metablob + + f->open_array_section("subtrees"); + for(map >::const_iterator i = subtrees.begin(); + i != subtrees.end(); ++i) { + f->open_object_section("tree"); + f->dump_stream("root dirfrag") << i->first; + for (vector::const_iterator j = i->second.begin(); + j != i->second.end(); ++j) { + f->dump_stream("bound dirfrag") << *j; + } + f->close_section(); // tree + } + f->close_section(); // subtrees + + f->open_array_section("ambiguous subtrees"); + for(set::const_iterator i = ambiguous_subtrees.begin(); + i != ambiguous_subtrees.end(); ++i) { + f->dump_stream("dirfrag") << *i; + } + f->close_section(); // ambiguous subtrees + + f->dump_int("expire position", expire_pos); +} + +void ESubtreeMap::generate_test_instances(list& ls) +{ + ls.push_back(new ESubtreeMap()); +} + void ESubtreeMap::replay(MDS *mds) { if (expire_pos && expire_pos > mds->mdlog->journaler->get_expire_pos()) diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h index 4b8e091a352e..eefbbf0e3752 100644 --- a/src/test/encoding/types.h +++ b/src/test/encoding/types.h @@ -154,6 +154,9 @@ TYPE(rename_rollback::drec) TYPE(rename_rollback) TYPE(ESlaveUpdate) +#include "mds/events/ESubtreeMap.h" +TYPE(ESubtreeMap) + #ifdef WITH_RADOSGW #include "rgw/rgw_rados.h"