]> git.proxmox.com Git - ceph.git/blob - ceph/src/common/snap_types.cc
update ceph source to reef 18.2.0
[ceph.git] / ceph / src / common / snap_types.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #include "snap_types.h"
5 #include "common/Formatter.h"
6
7 void SnapRealmInfo::encode(ceph::buffer::list& bl) const
8 {
9 h.num_snaps = my_snaps.size();
10 h.num_prior_parent_snaps = prior_parent_snaps.size();
11 using ceph::encode;
12 encode(h, bl);
13 ceph::encode_nohead(my_snaps, bl);
14 ceph::encode_nohead(prior_parent_snaps, bl);
15 }
16
17 void SnapRealmInfo::decode(ceph::buffer::list::const_iterator& bl)
18 {
19 using ceph::decode;
20 decode(h, bl);
21 ceph::decode_nohead(h.num_snaps, my_snaps, bl);
22 ceph::decode_nohead(h.num_prior_parent_snaps, prior_parent_snaps, bl);
23 }
24
25 void SnapRealmInfo::dump(ceph::Formatter *f) const
26 {
27 f->dump_unsigned("ino", ino());
28 f->dump_unsigned("parent", parent());
29 f->dump_unsigned("seq", seq());
30 f->dump_unsigned("parent_since", parent_since());
31 f->dump_unsigned("created", created());
32
33 f->open_array_section("snaps");
34 for (auto p = my_snaps.begin(); p != my_snaps.end(); ++p)
35 f->dump_unsigned("snap", *p);
36 f->close_section();
37
38 f->open_array_section("prior_parent_snaps");
39 for (auto p = prior_parent_snaps.begin(); p != prior_parent_snaps.end(); ++p)
40 f->dump_unsigned("snap", *p);
41 f->close_section();
42 }
43
44 void SnapRealmInfo::generate_test_instances(std::list<SnapRealmInfo*>& o)
45 {
46 o.push_back(new SnapRealmInfo);
47 o.push_back(new SnapRealmInfo(1, 10, 10, 0));
48 o.push_back(new SnapRealmInfo(1, 10, 10, 0));
49 o.back()->my_snaps.push_back(10);
50 o.push_back(new SnapRealmInfo(1, 10, 10, 5));
51 o.back()->my_snaps.push_back(10);
52 o.back()->prior_parent_snaps.push_back(3);
53 o.back()->prior_parent_snaps.push_back(5);
54 }
55
56 // -- "new" SnapRealmInfo --
57
58 void SnapRealmInfoNew::encode(ceph::buffer::list& bl) const
59 {
60 using ceph::encode;
61 ENCODE_START(1, 1, bl);
62 encode(info, bl);
63 encode(last_modified, bl);
64 encode(change_attr, bl);
65 ENCODE_FINISH(bl);
66 }
67
68 void SnapRealmInfoNew::decode(ceph::buffer::list::const_iterator& bl)
69 {
70 using ceph::decode;
71 DECODE_START(1, bl);
72 decode(info, bl);
73 decode(last_modified, bl);
74 decode(change_attr, bl);
75 DECODE_FINISH(bl);
76 }
77
78 void SnapRealmInfoNew::dump(ceph::Formatter *f) const
79 {
80 info.dump(f);
81 f->dump_stream("last_modified") << last_modified;
82 f->dump_unsigned("change_attr", change_attr);
83 }
84
85 void SnapRealmInfoNew::generate_test_instances(std::list<SnapRealmInfoNew*>& o)
86 {
87 o.push_back(new SnapRealmInfoNew);
88 o.push_back(new SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 0), utime_t(), 0));
89 o.push_back(new SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 0), utime_t(), 1));
90 o.back()->info.my_snaps.push_back(10);
91 o.push_back(new SnapRealmInfoNew(SnapRealmInfo(1, 10, 10, 5), utime_t(), 2));
92 o.back()->info.my_snaps.push_back(10);
93 o.back()->info.prior_parent_snaps.push_back(3);
94 o.back()->info.prior_parent_snaps.push_back(5);
95 }
96
97 // -----
98
99 bool SnapContext::is_valid() const
100 {
101 // seq is a valid snapid
102 if (seq > CEPH_MAXSNAP)
103 return false;
104 if (!snaps.empty()) {
105 // seq >= snaps[0]
106 if (snaps[0] > seq)
107 return false;
108 // snaps[] is descending
109 snapid_t t = snaps[0];
110 for (unsigned i=1; i<snaps.size(); i++) {
111 if (snaps[i] >= t || t == 0)
112 return false;
113 t = snaps[i];
114 }
115 }
116 return true;
117 }
118
119 void SnapContext::dump(ceph::Formatter *f) const
120 {
121 f->dump_unsigned("seq", seq);
122 f->open_array_section("snaps");
123 for (auto p = snaps.cbegin(); p != snaps.cend(); ++p)
124 f->dump_unsigned("snap", *p);
125 f->close_section();
126 }
127
128 void SnapContext::generate_test_instances(std::list<SnapContext*>& o)
129 {
130 o.push_back(new SnapContext);
131 std::vector<snapid_t> v;
132 o.push_back(new SnapContext(10, v));
133 v.push_back(18);
134 v.push_back(3);
135 v.push_back(1);
136 o.push_back(new SnapContext(20, v));
137 }