]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
AnchorServer: use modern encoding for server state
authorGreg Farnum <greg@inktank.com>
Tue, 5 Feb 2013 19:38:25 +0000 (11:38 -0800)
committerGreg Farnum <greg@inktank.com>
Fri, 8 Feb 2013 21:17:51 +0000 (13:17 -0800)
Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/AnchorServer.cc
src/mds/AnchorServer.h
src/test/encoding/types.h

index 4b1bf64f9faff00ef2fd483ec0a07872f677f8f6..e980bd4fac94190f717ba5c080f49e7a1410d2bf 100644 (file)
@@ -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<inodeno_t, Anchor>::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<AnchorServer*>& ls)
+{
+  AnchorServer *sample = new AnchorServer();
+  sample->pending_create[0] = 0;
+  sample->pending_destroy[0] = 1;
+  sample->anchor_map[0] = Anchor();
+  ls.push_back(sample);
+}
+
 
 
 /*
index 50a848e333592259c32a5f9339a16f0b45174ad7..b82c72e2e705bf4573313fcf0e0df8129d13f3a6 100644 (file)
@@ -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<version_t, inodeno_t> 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<Context *>& finished);
 
   void dump();
+  void dump(Formatter *f) const;
+  static void generate_test_instances(list<AnchorServer*>& ls);
+  // for the dencoder
+  AnchorServer() : MDSTableServer(NULL, TABLE_ANCHOR) {}
+  void encode(bufferlist& bl) const {
+    AnchorServer *me = const_cast<AnchorServer*>(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);
index 724b09daaa7ec0e606be25305b9dfacf19a5fcf8..703afa9e27ad284baeffbdde0603a9d92918ec4d 100644 (file)
@@ -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"