]>
git.proxmox.com Git - ceph.git/blob - ceph/src/mds/snap.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2004- Sage Weil <sage@newdream.net>
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
15 #include <string_view>
19 #include "common/Formatter.h"
25 void SnapInfo::encode(bufferlist
& bl
) const
27 ENCODE_START(2, 2, bl
);
35 void SnapInfo::decode(bufferlist::const_iterator
& bl
)
37 DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, bl
);
45 void SnapInfo::dump(Formatter
*f
) const
47 f
->dump_unsigned("snapid", snapid
);
48 f
->dump_unsigned("ino", ino
);
49 f
->dump_stream("stamp") << stamp
;
50 f
->dump_string("name", name
);
53 void SnapInfo::generate_test_instances(list
<SnapInfo
*>& ls
)
55 ls
.push_back(new SnapInfo
);
56 ls
.push_back(new SnapInfo
);
57 ls
.back()->snapid
= 1;
59 ls
.back()->stamp
= utime_t(3, 4);
60 ls
.back()->name
= "foo";
63 ostream
& operator<<(ostream
& out
, const SnapInfo
&sn
)
65 return out
<< "snap(" << sn
.snapid
68 << "' " << sn
.stamp
<< ")";
71 std::string_view
SnapInfo::get_long_name() const
73 if (long_name
.empty() ||
74 long_name
.compare(1, name
.size(), name
) ||
75 long_name
.find_last_of("_") != name
.size() + 1) {
77 snprintf(nm
, sizeof(nm
), "_%s_%llu", name
.c_str(), (unsigned long long)ino
);
87 void snaplink_t::encode(bufferlist
& bl
) const
89 ENCODE_START(2, 2, bl
);
95 void snaplink_t::decode(bufferlist::const_iterator
& bl
)
97 DECODE_START_LEGACY_COMPAT_LEN(2, 2, 2, bl
);
103 void snaplink_t::dump(Formatter
*f
) const
105 f
->dump_unsigned("ino", ino
);
106 f
->dump_unsigned("first", first
);
109 void snaplink_t::generate_test_instances(list
<snaplink_t
*>& ls
)
111 ls
.push_back(new snaplink_t
);
112 ls
.push_back(new snaplink_t
);
114 ls
.back()->first
= 123;
117 ostream
& operator<<(ostream
& out
, const snaplink_t
&l
)
119 return out
<< l
.ino
<< "@" << l
.first
;
126 void sr_t::encode(bufferlist
& bl
) const
128 ENCODE_START(6, 4, bl
);
131 encode(last_created
, bl
);
132 encode(last_destroyed
, bl
);
133 encode(current_parent_since
, bl
);
135 encode(past_parents
, bl
);
136 encode(past_parent_snaps
, bl
);
141 void sr_t::decode(bufferlist::const_iterator
& p
)
143 DECODE_START_LEGACY_COMPAT_LEN(6, 4, 4, p
);
146 decode(struct_v
, p
); // yes, really: extra byte for v2 encoding only, see 6ee52e7d.
150 decode(last_created
, p
);
151 decode(last_destroyed
, p
);
152 decode(current_parent_since
, p
);
154 decode(past_parents
, p
);
156 decode(past_parent_snaps
, p
);
164 void sr_t::dump(Formatter
*f
) const
166 f
->dump_unsigned("seq", seq
);
167 f
->dump_unsigned("created", created
);
168 f
->dump_unsigned("last_created", last_created
);
169 f
->dump_unsigned("last_destroyed", last_destroyed
);
170 f
->dump_unsigned("current_parent_since", current_parent_since
);
172 f
->open_array_section("snaps");
173 for (map
<snapid_t
,SnapInfo
>::const_iterator p
= snaps
.begin(); p
!= snaps
.end(); ++p
) {
174 f
->open_object_section("snapinfo");
175 f
->dump_unsigned("last", p
->first
);
181 f
->open_array_section("past_parents");
182 for (map
<snapid_t
,snaplink_t
>::const_iterator p
= past_parents
.begin(); p
!= past_parents
.end(); ++p
) {
183 f
->open_object_section("past_parent");
184 f
->dump_unsigned("last", p
->first
);
190 f
->open_array_section("past_parent_snaps");
191 for (auto p
= past_parent_snaps
.begin(); p
!= past_parent_snaps
.end(); ++p
) {
192 f
->open_object_section("snapinfo");
193 f
->dump_unsigned("snapid", *p
);
199 void sr_t::generate_test_instances(list
<sr_t
*>& ls
)
201 ls
.push_back(new sr_t
);
202 ls
.push_back(new sr_t
);
204 ls
.back()->created
= 2;
205 ls
.back()->last_created
= 3;
206 ls
.back()->last_destroyed
= 4;
207 ls
.back()->current_parent_since
= 5;
208 ls
.back()->snaps
[123].snapid
= 7;
209 ls
.back()->snaps
[123].ino
= 8;
210 ls
.back()->snaps
[123].stamp
= utime_t(9, 10);
211 ls
.back()->snaps
[123].name
= "name1";
212 ls
.back()->past_parents
[12].ino
= 12;
213 ls
.back()->past_parents
[12].first
= 3;
215 ls
.back()->past_parent_snaps
.insert(5);
216 ls
.back()->past_parent_snaps
.insert(6);