]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/newstore: define a fid_backpointer_t type
authorSage Weil <sage@redhat.com>
Tue, 6 Oct 2015 23:05:42 +0000 (19:05 -0400)
committerSage Weil <sage@redhat.com>
Fri, 1 Jan 2016 18:05:17 +0000 (13:05 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
fix wal_oP_t

src/os/newstore/newstore_types.cc
src/os/newstore/newstore_types.h
src/test/encoding/types.h

index bd19a6232a7ae7ca8a1e5cb4b0c923a30c871228..7fb39f229d95fe85b2292c71a15b7f3ea846273e 100644 (file)
@@ -58,6 +58,49 @@ void fid_t::generate_test_instances(list<fid_t*>& o)
   o.push_back(new fid_t(123, 3278));
 }
 
+// fid_backpointer_t
+
+void fid_backpointer_t::encode(bufferlist& bl) const
+{
+  ENCODE_START(1, 1, bl);
+  ::encode(oid, bl);
+  ::encode(nid, bl);
+  ::encode(offset, bl);
+  ENCODE_FINISH(bl);
+}
+
+void fid_backpointer_t::decode(bufferlist::iterator& p)
+{
+  DECODE_START(1, p);
+  ::decode(oid, p);
+  ::decode(nid, p);
+  ::decode(offset, p);
+  DECODE_FINISH(p);
+}
+
+void fid_backpointer_t::dump(Formatter *f) const
+{
+  f->dump_object("oid", oid);
+  f->dump_unsigned("nid", nid);
+  f->dump_unsigned("offset", offset);
+}
+
+void fid_backpointer_t::generate_test_instances(list<fid_backpointer_t*>& o)
+{
+  o.push_back(new fid_backpointer_t);
+  o.push_back(new fid_backpointer_t);
+  o.back()->oid.hobj.oid.name = "foo";
+  o.back()->nid = 12;
+  o.back()->offset = 123;
+}
+
+ostream& operator<<(ostream& out, const fid_backpointer_t& bp)
+{
+  return out << "fidbp(" << bp.oid
+            << " nid " << bp.nid
+            << " offset " << bp.offset << ")";
+}
+
 // fragment_t
 
 void fragment_t::encode(bufferlist& bl) const
index 234e590b8a9ed1a7116f50090e4fca6fdfaee872..881d4d284d95c03b319349f752ea2fceb5b3805e 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <ostream>
 #include "include/types.h"
+#include "common/hobject.h"
 
 namespace ceph {
   class Formatter;
@@ -71,6 +72,24 @@ static inline bool operator!=(const fid_t& a, const fid_t& b) {
   return !(a == b);
 }
 
+struct fid_backpointer_t {
+  ghobject_t oid;
+  uint64_t nid;
+  uint64_t offset;
+
+  fid_backpointer_t() : nid(0), offset(0) {}
+  fid_backpointer_t(const ghobject_t& o, uint64_t n, uint64_t off)
+    : oid(o), nid(n), offset(off) {}
+
+  void encode(bufferlist& bl) const;
+  void decode(bufferlist::iterator& p);
+  void dump(Formatter *f) const;
+  static void generate_test_instances(list<fid_backpointer_t*>& o);
+};
+WRITE_CLASS_ENCODER(fid_backpointer_t)
+
+ostream& operator<<(ostream& out, const fid_backpointer_t& bp);
+
 /// fragment: a byte extent backed by a file
 struct fragment_t {
   uint32_t offset;   ///< offset in file to first byte of this fragment
@@ -170,6 +189,8 @@ struct wal_op_t {
   uint64_t nid;
   vector<overlay_t> overlays;
 
+  wal_op_t() : offset(0), length(0), nid(0) {}
+
   void encode(bufferlist& bl) const;
   void decode(bufferlist::iterator& p);
   void dump(Formatter *f) const;
index 9cb3706ac73d798d29cf7c33572a3efed3aa04db..e266166eea01f38b593a651011e8ad4b9bdd8586 100644 (file)
@@ -114,6 +114,7 @@ TYPE(SequencerPosition)
 #include "os/newstore/newstore_types.h"
 TYPE(cnode_t)
 TYPE(fid_t)
+TYPE(fid_backpointer_t)
 TYPE(fragment_t)
 TYPE(overlay_t)
 TYPE(onode_t)