Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / common / snap_types.h
1 #ifndef __CEPH_SNAP_TYPES_H
2 #define __CEPH_SNAP_TYPES_H
3
4 #include "include/types.h"
5 #include "include/fs_types.h"
6
7 namespace ceph {
8
9 class Formatter;
10 }
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
15
16   SnapRealmInfo() {
17     memset(&h, 0, sizeof(h));
18   }
19   SnapRealmInfo(inodeno_t ino_, snapid_t created_, snapid_t seq_, snapid_t current_parent_since_) {
20     memset(&h, 0, sizeof(h));
21     h.ino = ino_;
22     h.created = created_;
23     h.seq = seq_;
24     h.parent_since = current_parent_since_;
25   }
26   
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); }
32
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);
37 };
38 WRITE_CLASS_ENCODER(SnapRealmInfo)
39
40
41 struct SnapContext {
42   snapid_t seq;            // 'time' stamp
43   vector<snapid_t> snaps;  // existent snaps, in descending order
44
45   SnapContext() {}
46   SnapContext(snapid_t s, const vector<snapid_t>& v) : seq(s), snaps(v) {}    
47
48   bool is_valid() const;
49
50   void clear() {
51     seq = 0;
52     snaps.clear();
53   }
54   bool empty() { return seq == 0; }
55
56   void encode(bufferlist& bl) const {
57     ::encode(seq, bl);
58     ::encode(snaps, bl);
59   }
60   void decode(bufferlist::iterator& bl) {
61     ::decode(seq, bl);
62     ::decode(snaps, bl);
63   }
64   void dump(Formatter *f) const;
65   static void generate_test_instances(list<SnapContext*>& o);
66 };
67 WRITE_CLASS_ENCODER(SnapContext)
68
69 inline ostream& operator<<(ostream& out, const SnapContext& snapc) {
70   return out << snapc.seq << "=" << snapc.snaps;
71 }
72
73 //}
74
75 #endif