From ff63530d6746a91fd4b5ab1370f85be5fb915b68 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Tue, 5 Feb 2013 11:37:55 -0800 Subject: [PATCH] mds: Capability (and sub-structs) now uses modern encoding Signed-off-by: Sage Weil Signed-off-by: Greg Farnum --- src/mds/Capability.cc | 96 ++++++++++++++++++++++++++++++++++----- src/mds/Capability.h | 8 +++- src/test/encoding/types.h | 3 ++ 3 files changed, 94 insertions(+), 13 deletions(-) diff --git a/src/mds/Capability.cc b/src/mds/Capability.cc index 0491d52db5e93..f1394308d9be1 100644 --- a/src/mds/Capability.cc +++ b/src/mds/Capability.cc @@ -23,26 +23,48 @@ void Capability::Export::encode(bufferlist &bl) const { - __u8 struct_v = 1; - ::encode(struct_v, bl); + ENCODE_START(2, 2, bl); ::encode(wanted, bl); ::encode(issued, bl); ::encode(pending, bl); ::encode(client_follows, bl); ::encode(mseq, bl); ::encode(last_issue_stamp, bl); + ENCODE_FINISH(bl); } void Capability::Export::decode(bufferlist::iterator &p) { - __u8 struct_v; - ::decode(struct_v, p); + DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, p); ::decode(wanted, p); ::decode(issued, p); ::decode(pending, p); ::decode(client_follows, p); ::decode(mseq, p); ::decode(last_issue_stamp, p); + DECODE_FINISH(p); +} + +void Capability::Export::dump(Formatter *f) const +{ + f->dump_unsigned("wanted", wanted); + f->dump_unsigned("issued", issued); + f->dump_unsigned("pending", pending); + f->dump_unsigned("client_follows", client_follows); + f->dump_unsigned("migrate_seq", mseq); + f->dump_stream("last_issue_stamp") << last_issue_stamp; +} + +void Capability::Export::generate_test_instances(list& ls) +{ + ls.push_back(new Export); + ls.push_back(new Export); + ls.back()->wanted = 1; + ls.back()->issued = 2; + ls.back()->pending = 3; + ls.back()->client_follows = 4; + ls.back()->mseq = 5; + ls.back()->last_issue_stamp = utime_t(6, 7); } @@ -52,20 +74,36 @@ void Capability::Export::decode(bufferlist::iterator &p) void Capability::revoke_info::encode(bufferlist& bl) const { - __u8 struct_v = 1; - ::encode(struct_v, bl); + ENCODE_START(2, 2, bl) ::encode(before, bl); ::encode(seq, bl); ::encode(last_issue, bl); + ENCODE_FINISH(bl); } void Capability::revoke_info::decode(bufferlist::iterator& bl) { - __u8 struct_v; - ::decode(struct_v, bl); + DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, bl); ::decode(before, bl); ::decode(seq, bl); ::decode(last_issue, bl); + DECODE_FINISH(bl); +} + +void Capability::revoke_info::dump(Formatter *f) const +{ + f->dump_unsigned("before", before); + f->dump_unsigned("seq", seq); + f->dump_unsigned("last_issue", last_issue); +} + +void Capability::revoke_info::generate_test_instances(list& ls) +{ + ls.push_back(new revoke_info); + ls.push_back(new revoke_info); + ls.back()->before = 1; + ls.back()->seq = 2; + ls.back()->last_issue = 3; } @@ -75,26 +113,60 @@ void Capability::revoke_info::decode(bufferlist::iterator& bl) void Capability::encode(bufferlist& bl) const { - __u8 struct_v = 1; - ::encode(struct_v, bl); + ENCODE_START(2, 2, bl) ::encode(last_sent, bl); ::encode(last_issue_stamp, bl); ::encode(_wanted, bl); ::encode(_pending, bl); ::encode(_revokes, bl); + ENCODE_FINISH(bl); } void Capability::decode(bufferlist::iterator &bl) { - __u8 struct_v; - ::decode(struct_v, bl); + DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, bl) ::decode(last_sent, bl); ::decode(last_issue_stamp, bl); ::decode(_wanted, bl); ::decode(_pending, bl); ::decode(_revokes, bl); + DECODE_FINISH(bl); _calc_issued(); } + +void Capability::dump(Formatter *f) const +{ + f->dump_unsigned("last_sent", last_sent); + f->dump_unsigned("last_issue_stamp", last_issue_stamp); + f->dump_unsigned("wanted", _wanted); + f->dump_unsigned("pending", _pending); + + f->open_array_section("revokes"); + for (list::const_iterator p = _revokes.begin(); p != _revokes.end(); ++p) { + f->open_object_section("revoke"); + p->dump(f); + f->close_section(); + } + f->close_section(); +} + +void Capability::generate_test_instances(list& ls) +{ + ls.push_back(new Capability); + ls.push_back(new Capability); + ls.back()->last_sent = 11; + ls.back()->last_issue_stamp = utime_t(12, 13); + ls.back()->_wanted = 14; + ls.back()->_pending = 15; + ls.back()->_revokes.push_back(revoke_info()); + ls.back()->_revokes.back().before = 16; + ls.back()->_revokes.back().seq = 17; + ls.back()->_revokes.back().last_issue = 18; + ls.back()->_revokes.push_back(revoke_info()); + ls.back()->_revokes.back().before = 19; + ls.back()->_revokes.back().seq = 20; + ls.back()->_revokes.back().last_issue = 21; +} diff --git a/src/mds/Capability.h b/src/mds/Capability.h index 4008a83597858..946afdc02b937 100644 --- a/src/mds/Capability.h +++ b/src/mds/Capability.h @@ -89,6 +89,8 @@ public: wanted(w), issued(i), pending(p), client_follows(cf), mseq(s), last_issue_stamp(lis) {} void encode(bufferlist &bl) const; void decode(bufferlist::iterator &p); + void dump(Formatter *f) const; + static void generate_test_instances(list& ls); }; private: @@ -113,6 +115,8 @@ public: revoke_info(__u32 b, ceph_seq_t s, ceph_seq_t li) : before(b), seq(s), last_issue(li) {} void encode(bufferlist& bl) const; void decode(bufferlist::iterator& bl); + void dump(Formatter *f) const; + static void generate_test_instances(list& ls); }; private: __u32 _pending, _issued; @@ -207,7 +211,7 @@ public: xlist::item item_session_caps; xlist::item item_snaprealm_caps; - Capability(CInode *i, uint64_t id, client_t c) : + Capability(CInode *i = NULL, uint64_t id = 0, client_t c = 0) : inode(i), client(c), cap_id(id), _wanted(0), @@ -304,6 +308,8 @@ public: // serializers void encode(bufferlist &bl) const; void decode(bufferlist::iterator &bl); + void dump(Formatter *f) const; + static void generate_test_instances(list& ls); }; diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h index 423d8472eea98..765b7d0a49f0f 100644 --- a/src/test/encoding/types.h +++ b/src/test/encoding/types.h @@ -113,6 +113,9 @@ TYPE(mds_table_pending_t) TYPE_FEATUREFUL(MDSMap) TYPE_FEATUREFUL(MDSMap::mds_info_t) +#include "mds/Capability.h" +TYPE(Capability) + #ifdef WITH_RADOSGW #include "rgw/rgw_rados.h" -- 2.39.5