]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: EMetaBlob::nullbit modernization for dencoder
authorGreg Farnum <greg@inktank.com>
Fri, 1 Feb 2013 23:50:01 +0000 (15:50 -0800)
committerGreg Farnum <greg@inktank.com>
Fri, 8 Feb 2013 21:17:52 +0000 (13:17 -0800)
And set defaults in the default constructor.

Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/events/EMetaBlob.h
src/mds/journal.cc
src/test/encoding/types.h

index 0843a73aef2cf5555dcc9a962be25f59feec10dc..8549d22be64f2014a62a6cc0a2ac880bf90bc651 100644 (file)
@@ -188,23 +188,12 @@ public:
       ::encode(dr, _enc);
     }
     nullbit(bufferlist::iterator &p) { decode(p); }
-    nullbit() {}
+    nullbit(): dnfirst(0), dnlast(0), dnv(0), dirty(false) {}
 
-    void encode(bufferlist& bl) const {
-      assert(_enc.length());
-      ENCODE_START(2, 2, bl);
-      bl.append(_enc);
-      ENCODE_FINISH(bl);
-    }
-    void decode(bufferlist::iterator &bl) {
-      DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, bl);
-      ::decode(dn, bl);
-      ::decode(dnfirst, bl);
-      ::decode(dnlast, bl);
-      ::decode(dnv, bl);
-      ::decode(dirty, 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<nullbit*>& ls);
     void print(ostream& out) {
       out << " nullbit dn " << dn << " [" << dnfirst << "," << dnlast << "] dnv " << dnv
          << " dirty=" << dirty << std::endl;
index 9a45a14b0f686f1364bf056200c68b03586129b7..6915ea7187114898a4d945d32323cda6752b55d8 100644 (file)
@@ -378,6 +378,9 @@ void EMetaBlob::update_segment(LogSegment *ls)
   //if (!client_reqs.empty())
     //    ls->last_client_tid[client_reqs.rbegin()->client] = client_reqs.rbegin()->tid);
 }
+
+// EMetaBlob::fullbit
+
 void EMetaBlob::fullbit::encode(bufferlist& bl) const {
   ENCODE_START(4, 4, bl);
   if (!_enc.length()) {
@@ -516,6 +519,8 @@ void EMetaBlob::fullbit::update_inode(MDS *mds, CInode *in)
   in->old_inodes = old_inodes;
 }
 
+// EMetaBlob::remotebit
+
 void EMetaBlob::remotebit::encode(bufferlist& bl) const
 {
   ENCODE_START(2, 2, bl);
@@ -584,6 +589,65 @@ generate_test_instances(list<EMetaBlob::remotebit*>& ls)
   ls.push_back(remote);
 }
 
+// EMetaBlob::nullbit
+
+void EMetaBlob::nullbit::encode(bufferlist& bl) const
+{
+  ENCODE_START(2, 2, bl);
+  if (!_enc.length()) {
+    nullbit copy(dn, dnfirst, dnlast, dnv, dirty);
+    bl.append(copy._enc);
+  } else {
+    bl.append(_enc);
+  }
+  ENCODE_FINISH(bl);
+}
+
+void EMetaBlob::nullbit::decode(bufferlist::iterator &bl)
+{
+  DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, bl);
+  ::decode(dn, bl);
+  ::decode(dnfirst, bl);
+  ::decode(dnlast, bl);
+  ::decode(dnv, bl);
+  ::decode(dirty, bl);
+  DECODE_FINISH(bl);
+}
+
+void EMetaBlob::nullbit::dump(Formatter *f) const
+{
+  if (_enc.length() && !dn.length()) {
+    /* if our bufferlist has data but our name is empty, we
+     * haven't initialized ourselves; do so in order to print members!
+     * We use const_cast here because the whole point is we aren't
+     * fully set up and this isn't changing who we "are", just our
+     * representation.
+     */
+    EMetaBlob::nullbit *me = const_cast<EMetaBlob::nullbit*>(this);
+    bufferlist encoded;
+    encode(encoded);
+    bufferlist::iterator p = encoded.begin();
+    me->decode(p);
+  }
+  f->dump_string("dentry", dn);
+  f->dump_int("snapid.first", dnfirst);
+  f->dump_int("snapid.last", dnlast);
+  f->dump_int("dentry version", dnv);
+  f->dump_string("dirty", dirty ? "true" : "false");
+}
+
+void EMetaBlob::nullbit::generate_test_instances(list<nullbit*>& ls)
+{
+  nullbit *sample = new nullbit("/test/dentry", 0, 10, 15, false);
+  nullbit *sample2 = new nullbit("/test/dirty", 10, 20, 25, true);
+  ls.push_back(sample);
+  ls.push_back(sample2);
+}
+
+/**
+ *
+ */
+
 void EMetaBlob::replay(MDS *mds, LogSegment *logseg, MDSlaveUpdate *slaveup)
 {
   dout(10) << "EMetaBlob.replay " << lump_map.size() << " dirlumps by " << client_name << dendl;
index ae074a4997bd21c65cfbd94757fe5c2824890042..b4d36c45aea811c74e991e390e916b8458b91041 100644 (file)
@@ -136,6 +136,8 @@ TYPE(EImportStart)
 #include "mds/events/EMetaBlob.h"
 TYPE(EMetaBlob::fullbit)
 TYPE(EMetaBlob::remotebit)
+TYPE(EMetaBlob::nullbit)
+
 
 #ifdef WITH_RADOSGW