initial code repo
[stor4nfv.git] / src / ceph / src / common / snap_types.h
diff --git a/src/ceph/src/common/snap_types.h b/src/ceph/src/common/snap_types.h
new file mode 100644 (file)
index 0000000..af0d025
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef __CEPH_SNAP_TYPES_H
+#define __CEPH_SNAP_TYPES_H
+
+#include "include/types.h"
+#include "include/fs_types.h"
+
+namespace ceph {
+
+class Formatter;
+}
+struct SnapRealmInfo {
+  mutable ceph_mds_snap_realm h;
+  vector<snapid_t> my_snaps;
+  vector<snapid_t> prior_parent_snaps;  // before parent_since
+
+  SnapRealmInfo() {
+    memset(&h, 0, sizeof(h));
+  }
+  SnapRealmInfo(inodeno_t ino_, snapid_t created_, snapid_t seq_, snapid_t current_parent_since_) {
+    memset(&h, 0, sizeof(h));
+    h.ino = ino_;
+    h.created = created_;
+    h.seq = seq_;
+    h.parent_since = current_parent_since_;
+  }
+  
+  inodeno_t ino() const { return inodeno_t(h.ino); }
+  inodeno_t parent() const { return inodeno_t(h.parent); }
+  snapid_t seq() const { return snapid_t(h.seq); }
+  snapid_t parent_since() const { return snapid_t(h.parent_since); }
+  snapid_t created() const { return snapid_t(h.created); }
+
+  void encode(bufferlist& bl) const;
+  void decode(bufferlist::iterator& bl);
+  void dump(Formatter *f) const;
+  static void generate_test_instances(list<SnapRealmInfo*>& o);
+};
+WRITE_CLASS_ENCODER(SnapRealmInfo)
+
+
+struct SnapContext {
+  snapid_t seq;            // 'time' stamp
+  vector<snapid_t> snaps;  // existent snaps, in descending order
+
+  SnapContext() {}
+  SnapContext(snapid_t s, const vector<snapid_t>& v) : seq(s), snaps(v) {}    
+
+  bool is_valid() const;
+
+  void clear() {
+    seq = 0;
+    snaps.clear();
+  }
+  bool empty() { return seq == 0; }
+
+  void encode(bufferlist& bl) const {
+    ::encode(seq, bl);
+    ::encode(snaps, bl);
+  }
+  void decode(bufferlist::iterator& bl) {
+    ::decode(seq, bl);
+    ::decode(snaps, bl);
+  }
+  void dump(Formatter *f) const;
+  static void generate_test_instances(list<SnapContext*>& o);
+};
+WRITE_CLASS_ENCODER(SnapContext)
+
+inline ostream& operator<<(ostream& out, const SnapContext& snapc) {
+  return out << snapc.seq << "=" << snapc.snaps;
+}
+
+//}
+
+#endif