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