]> git.proxmox.com Git - ceph.git/blame - ceph/src/common/snap_types.cc
update ceph source to reef 18.2.0
[ceph.git] / ceph / src / common / snap_types.cc
CommitLineData
f67539c2
TL
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
7c673cae
FG
3
4#include "snap_types.h"
5#include "common/Formatter.h"
6
f67539c2 7void SnapRealmInfo::encode(ceph::buffer::list& bl) const
7c673cae
FG
8{
9 h.num_snaps = my_snaps.size();
10 h.num_prior_parent_snaps = prior_parent_snaps.size();
11fdf7f2
TL
11 using ceph::encode;
12 encode(h, bl);
f67539c2
TL
13 ceph::encode_nohead(my_snaps, bl);
14 ceph::encode_nohead(prior_parent_snaps, bl);
7c673cae
FG
15}
16
f67539c2 17void SnapRealmInfo::decode(ceph::buffer::list::const_iterator& bl)
7c673cae 18{
11fdf7f2
TL
19 using ceph::decode;
20 decode(h, bl);
f67539c2
TL
21 ceph::decode_nohead(h.num_snaps, my_snaps, bl);
22 ceph::decode_nohead(h.num_prior_parent_snaps, prior_parent_snaps, bl);
7c673cae
FG
23}
24
f67539c2 25void SnapRealmInfo::dump(ceph::Formatter *f) const
7c673cae
FG
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");
f67539c2 34 for (auto p = my_snaps.begin(); p != my_snaps.end(); ++p)
7c673cae
FG
35 f->dump_unsigned("snap", *p);
36 f->close_section();
37
38 f->open_array_section("prior_parent_snaps");
f67539c2 39 for (auto p = prior_parent_snaps.begin(); p != prior_parent_snaps.end(); ++p)
7c673cae 40 f->dump_unsigned("snap", *p);
f67539c2 41 f->close_section();
7c673cae
FG
42}
43
f67539c2 44void SnapRealmInfo::generate_test_instances(std::list<SnapRealmInfo*>& o)
7c673cae
FG
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
1e59de90
TL
56// -- "new" SnapRealmInfo --
57
58void 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
68void 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
78void 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
85void 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}
7c673cae
FG
96
97// -----
98
99bool 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
f67539c2 119void SnapContext::dump(ceph::Formatter *f) const
7c673cae
FG
120{
121 f->dump_unsigned("seq", seq);
122 f->open_array_section("snaps");
f67539c2 123 for (auto p = snaps.cbegin(); p != snaps.cend(); ++p)
7c673cae
FG
124 f->dump_unsigned("snap", *p);
125 f->close_section();
126}
127
f67539c2 128void SnapContext::generate_test_instances(std::list<SnapContext*>& o)
7c673cae
FG
129{
130 o.push_back(new SnapContext);
f67539c2 131 std::vector<snapid_t> v;
7c673cae
FG
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}