]>
git.proxmox.com Git - ceph.git/blob - 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
4 #include "snap_types.h"
5 #include "common/Formatter.h"
7 void SnapRealmInfo::encode(ceph::buffer::list
& bl
) const
9 h
.num_snaps
= my_snaps
.size();
10 h
.num_prior_parent_snaps
= prior_parent_snaps
.size();
13 ceph::encode_nohead(my_snaps
, bl
);
14 ceph::encode_nohead(prior_parent_snaps
, bl
);
17 void SnapRealmInfo::decode(ceph::buffer::list::const_iterator
& bl
)
21 ceph::decode_nohead(h
.num_snaps
, my_snaps
, bl
);
22 ceph::decode_nohead(h
.num_prior_parent_snaps
, prior_parent_snaps
, bl
);
25 void SnapRealmInfo::dump(ceph::Formatter
*f
) const
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());
33 f
->open_array_section("snaps");
34 for (auto p
= my_snaps
.begin(); p
!= my_snaps
.end(); ++p
)
35 f
->dump_unsigned("snap", *p
);
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
);
44 void SnapRealmInfo::generate_test_instances(std::list
<SnapRealmInfo
*>& o
)
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);
56 // -- "new" SnapRealmInfo --
58 void SnapRealmInfoNew::encode(ceph::buffer::list
& bl
) const
61 ENCODE_START(1, 1, bl
);
63 encode(last_modified
, bl
);
64 encode(change_attr
, bl
);
68 void SnapRealmInfoNew::decode(ceph::buffer::list::const_iterator
& bl
)
73 decode(last_modified
, bl
);
74 decode(change_attr
, bl
);
78 void SnapRealmInfoNew::dump(ceph::Formatter
*f
) const
81 f
->dump_stream("last_modified") << last_modified
;
82 f
->dump_unsigned("change_attr", change_attr
);
85 void SnapRealmInfoNew::generate_test_instances(std::list
<SnapRealmInfoNew
*>& o
)
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);
99 bool SnapContext::is_valid() const
101 // seq is a valid snapid
102 if (seq
> CEPH_MAXSNAP
)
104 if (!snaps
.empty()) {
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)
119 void SnapContext::dump(ceph::Formatter
*f
) const
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
);
128 void SnapContext::generate_test_instances(std::list
<SnapContext
*>& o
)
130 o
.push_back(new SnapContext
);
131 std::vector
<snapid_t
> v
;
132 o
.push_back(new SnapContext(10, v
));
136 o
.push_back(new SnapContext(20, v
));