From: Greg Farnum Date: Tue, 5 Feb 2013 20:15:51 +0000 (-0800) Subject: mds: SessionMap now uses modern encoding X-Git-Tag: v0.58~100^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=07b24cf29df0c29ccb7c62cfe5696b9b45acc9ac;p=ceph.git mds: SessionMap now uses modern encoding Signed-off-by: Greg Farnum --- diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc index 87429ba139f..53fe90c10ba 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -140,19 +140,17 @@ void SessionMap::_save_finish(version_t v) // ------------------- -void SessionMap::encode(bufferlist& bl) +void SessionMap::encode(bufferlist& bl) const { uint64_t pre = -1; // for 0.19 compatibility; we forgot an encoding prefix. ::encode(pre, bl); - __u8 struct_v = 2; - ::encode(struct_v, bl); - + ENCODE_START(3, 3, bl); ::encode(version, bl); - for (hash_map::iterator p = session_map.begin(); + for (hash_map::const_iterator p = session_map.begin(); p != session_map.end(); - ++p) + ++p) { if (p->second->is_open() || p->second->is_closing() || p->second->is_stale() || @@ -160,6 +158,8 @@ void SessionMap::encode(bufferlist& bl) ::encode(p->first, bl); p->second->info.encode(bl); } + } + ENCODE_FINISH(bl); } void SessionMap::decode(bufferlist::iterator& p) @@ -168,12 +168,11 @@ void SessionMap::decode(bufferlist::iterator& p) uint64_t pre; ::decode(pre, p); if (pre == (uint64_t)-1) { - __u8 struct_v; - ::decode(struct_v, p); - assert(struct_v == 2); - + DECODE_START_LEGACY_COMPAT_LEN(3, 3, 3, p); + assert(struct_v >= 2); + ::decode(version, p); - + while (!p.end()) { entity_inst_t inst; ::decode(inst.name, p); @@ -183,6 +182,7 @@ void SessionMap::decode(bufferlist::iterator& p) s->info.decode(p); } + DECODE_FINISH(p); } else { // --- old format ---- version = pre; @@ -212,7 +212,29 @@ void SessionMap::decode(bufferlist::iterator& p) } } +void SessionMap::dump(Formatter *f) const +{ + f->open_array_section("Sessions"); + for (hash_map::const_iterator p = session_map.begin(); + p != session_map.end(); + ++p) { + f->open_object_section("Session"); + f->open_object_section("entity name"); + p->first.dump(f); + f->close_section(); // entity name + f->open_object_section("Session info"); + p->second->info.dump(f); + f->close_section(); // Session info + f->close_section(); // Session + } + f->close_section(); // Sessions +} +void SessionMap::generate_test_instances(list& ls) +{ + // pretty boring for now + ls.push_back(new SessionMap(NULL)); +} void SessionMap::wipe() { diff --git a/src/mds/SessionMap.h b/src/mds/SessionMap.h index ed94621a6fe..702a0b5dec8 100644 --- a/src/mds/SessionMap.h +++ b/src/mds/SessionMap.h @@ -228,6 +228,10 @@ public: SessionMap(MDS *m) : mds(m), version(0), projected(0), committing(0), committed(0) { } + + //for the dencoder + SessionMap() : mds(NULL), version(0), projected(0), + committing(0), committed(0) {} // sessions bool empty() { return session_map.empty(); } @@ -367,8 +371,10 @@ public: inodeno_t ino; list waiting_for_load; - void encode(bufferlist& bl); + void encode(bufferlist& bl) const; void decode(bufferlist::iterator& blp); + void dump(Formatter *f) const; + static void generate_test_instances(list& ls); object_t get_object_name(); diff --git a/src/test/encoding/types.h b/src/test/encoding/types.h index d3451fec428..799231a39f0 100644 --- a/src/test/encoding/types.h +++ b/src/test/encoding/types.h @@ -126,6 +126,9 @@ TYPE(Capability) #include "mds/AnchorServer.h" TYPE(AnchorServer) +#include "mds/SessionMap.h" +TYPE(SessionMap) + #include "mds/events/ECommitted.h" TYPE(ECommitted) #include "mds/events/EExport.h"