From 95cee97ea9e32e934641978a82656d12ff5ac5fa Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Tue, 5 Feb 2013 11:38:25 -0800 Subject: [PATCH] AnchorServer: use modern encoding for server state Signed-off-by: Greg Farnum --- src/mds/AnchorServer.cc | 24 ++++++++++++++++++++++++ src/mds/AnchorServer.h | 17 +++++++++++++---- src/test/encoding/types.h | 3 +++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/mds/AnchorServer.cc b/src/mds/AnchorServer.cc index 4b1bf64f9fa..e980bd4fac9 100644 --- a/src/mds/AnchorServer.cc +++ b/src/mds/AnchorServer.cc @@ -41,6 +41,30 @@ void AnchorServer::dump() dout(15) << "dump " << it->second << dendl; } +void AnchorServer::dump(Formatter *f) const +{ + f->open_array_section("anchor map"); + for (map::const_iterator i = anchor_map.begin(); + i != anchor_map.end(); ++i) { + f->open_object_section("entry"); + f->dump_int("ino", i->first); + f->open_object_section("Anchor"); + i->second.dump(f); + f->close_section(); // Anchor + f->close_section(); // entry + } + f->close_section(); // anchor map +} + +void AnchorServer::generate_test_instances(list& ls) +{ + AnchorServer *sample = new AnchorServer(); + sample->pending_create[0] = 0; + sample->pending_destroy[0] = 1; + sample->anchor_map[0] = Anchor(); + ls.push_back(sample); +} + /* diff --git a/src/mds/AnchorServer.h b/src/mds/AnchorServer.h index 50a848e3335..b82c72e2e70 100644 --- a/src/mds/AnchorServer.h +++ b/src/mds/AnchorServer.h @@ -34,20 +34,20 @@ class AnchorServer : public MDSTableServer { void reset_state(); void encode_server_state(bufferlist& bl) { - __u8 v = 1; - ::encode(v, bl); + ENCODE_START(2, 2, bl); ::encode(anchor_map, bl); ::encode(pending_create, bl); ::encode(pending_destroy, bl); ::encode(pending_update, bl); + ENCODE_FINISH(bl); } void decode_server_state(bufferlist::iterator& p) { - __u8 v; - ::decode(v, p); + DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, p); ::decode(anchor_map, p); ::decode(pending_create, p); ::decode(pending_destroy, p); ::decode(pending_update, p); + DECODE_FINISH(p); map sort; sort.insert(pending_create.begin(), pending_create.end()); @@ -65,6 +65,15 @@ class AnchorServer : public MDSTableServer { bool check_pending(version_t tid, MMDSTableRequest *req, list& finished); void dump(); + void dump(Formatter *f) const; + static void generate_test_instances(list& ls); + // for the dencoder + AnchorServer() : MDSTableServer(NULL, TABLE_ANCHOR) {} + void encode(bufferlist& bl) const { + AnchorServer *me = const_cast(this); + me->encode_server_state(bl); + } + void decode(bufferlist::iterator& bl) { decode_server_state(bl); } // server bits void _prepare(bufferlist &bl, uint64_t reqid, int bymds); diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h index 724b09daaa7..703afa9e27a 100644 --- a/src/test/encoding/types.h +++ b/src/test/encoding/types.h @@ -120,6 +120,9 @@ TYPE_FEATUREFUL(MDSMap::mds_info_t) #include "mds/Capability.h" TYPE(Capability) +#include "mds/AnchorServer.h" +TYPE(AnchorServer) + #ifdef WITH_RADOSGW #include "rgw/rgw_rados.h" -- 2.47.3