1 #ifndef __CEPH_SNAP_TYPES_H
2 #define __CEPH_SNAP_TYPES_H
4 #include "include/types.h"
5 #include "include/fs_types.h"
11 struct SnapRealmInfo {
12 mutable ceph_mds_snap_realm h;
13 vector<snapid_t> my_snaps;
14 vector<snapid_t> prior_parent_snaps; // before parent_since
17 memset(&h, 0, sizeof(h));
19 SnapRealmInfo(inodeno_t ino_, snapid_t created_, snapid_t seq_, snapid_t current_parent_since_) {
20 memset(&h, 0, sizeof(h));
24 h.parent_since = current_parent_since_;
27 inodeno_t ino() const { return inodeno_t(h.ino); }
28 inodeno_t parent() const { return inodeno_t(h.parent); }
29 snapid_t seq() const { return snapid_t(h.seq); }
30 snapid_t parent_since() const { return snapid_t(h.parent_since); }
31 snapid_t created() const { return snapid_t(h.created); }
33 void encode(bufferlist& bl) const;
34 void decode(bufferlist::iterator& bl);
35 void dump(Formatter *f) const;
36 static void generate_test_instances(list<SnapRealmInfo*>& o);
38 WRITE_CLASS_ENCODER(SnapRealmInfo)
42 snapid_t seq; // 'time' stamp
43 vector<snapid_t> snaps; // existent snaps, in descending order
46 SnapContext(snapid_t s, const vector<snapid_t>& v) : seq(s), snaps(v) {}
48 bool is_valid() const;
54 bool empty() { return seq == 0; }
56 void encode(bufferlist& bl) const {
60 void decode(bufferlist::iterator& bl) {
64 void dump(Formatter *f) const;
65 static void generate_test_instances(list<SnapContext*>& o);
67 WRITE_CLASS_ENCODER(SnapContext)
69 inline ostream& operator<<(ostream& out, const SnapContext& snapc) {
70 return out << snapc.seq << "=" << snapc.snaps;