]> git.proxmox.com Git - ceph.git/blame - ceph/src/common/snap_types.cc
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / common / snap_types.cc
CommitLineData
7c673cae
FG
1
2#include "snap_types.h"
3#include "common/Formatter.h"
4
5void 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 15void 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
23void 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
42void 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
57bool 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
77void 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
86void 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}