Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / common / snap_types.cc
1
2 #include "snap_types.h"
3 #include "common/Formatter.h"
4
5 void SnapRealmInfo::encode(bufferlist& bl) const
6 {
7   h.num_snaps = my_snaps.size();
8   h.num_prior_parent_snaps = prior_parent_snaps.size();
9   ::encode(h, bl);
10   ::encode_nohead(my_snaps, bl);
11   ::encode_nohead(prior_parent_snaps, bl);
12 }
13
14 void SnapRealmInfo::decode(bufferlist::iterator& bl)
15 {
16   ::decode(h, bl);
17   ::decode_nohead(h.num_snaps, my_snaps, bl);
18   ::decode_nohead(h.num_prior_parent_snaps, prior_parent_snaps, bl);
19 }
20
21 void SnapRealmInfo::dump(Formatter *f) const
22 {
23   f->dump_unsigned("ino", ino());
24   f->dump_unsigned("parent", parent());
25   f->dump_unsigned("seq", seq());
26   f->dump_unsigned("parent_since", parent_since());
27   f->dump_unsigned("created", created());
28
29   f->open_array_section("snaps");
30   for (vector<snapid_t>::const_iterator p = my_snaps.begin(); p != my_snaps.end(); ++p)
31     f->dump_unsigned("snap", *p);
32   f->close_section();
33
34   f->open_array_section("prior_parent_snaps");
35   for (vector<snapid_t>::const_iterator p = prior_parent_snaps.begin(); p != prior_parent_snaps.end(); ++p)
36     f->dump_unsigned("snap", *p);
37   f->close_section();  
38 }
39
40 void SnapRealmInfo::generate_test_instances(list<SnapRealmInfo*>& o)
41 {
42   o.push_back(new SnapRealmInfo);
43   o.push_back(new SnapRealmInfo(1, 10, 10, 0));
44   o.push_back(new SnapRealmInfo(1, 10, 10, 0));
45   o.back()->my_snaps.push_back(10);
46   o.push_back(new SnapRealmInfo(1, 10, 10, 5));
47   o.back()->my_snaps.push_back(10);
48   o.back()->prior_parent_snaps.push_back(3);
49   o.back()->prior_parent_snaps.push_back(5);
50 }
51
52
53 // -----
54
55 bool SnapContext::is_valid() const
56 {
57   // seq is a valid snapid
58   if (seq > CEPH_MAXSNAP)
59     return false;
60   if (!snaps.empty()) {
61     // seq >= snaps[0]
62     if (snaps[0] > seq)
63       return false;
64     // snaps[] is descending
65     snapid_t t = snaps[0];
66     for (unsigned i=1; i<snaps.size(); i++) {
67       if (snaps[i] >= t || t == 0)
68         return false;
69       t = snaps[i];
70     }
71   }
72   return true;
73 }
74
75 void SnapContext::dump(Formatter *f) const
76 {
77   f->dump_unsigned("seq", seq);
78   f->open_array_section("snaps");
79   for (vector<snapid_t>::const_iterator p = snaps.begin(); p != snaps.end(); ++p)
80     f->dump_unsigned("snap", *p);
81   f->close_section();
82 }
83
84 void SnapContext::generate_test_instances(list<SnapContext*>& o)
85 {
86   o.push_back(new SnapContext);
87   vector<snapid_t> v;
88   o.push_back(new SnapContext(10, v));
89   v.push_back(18);
90   v.push_back(3);
91   v.push_back(1);
92   o.push_back(new SnapContext(20, v));
93 }