]>
git.proxmox.com Git - ceph.git/blob - ceph/src/common/scrub_types.cc
1 #include "scrub_types.h"
5 using namespace librados
;
7 void object_id_wrapper::encode(bufferlist
& bl
) const
9 ENCODE_START(1, 1, bl
);
17 void object_id_wrapper::decode(bufferlist::const_iterator
& bp
)
28 static void encode(const object_id_t
& obj
, bufferlist
& bl
)
30 reinterpret_cast<const object_id_wrapper
&>(obj
).encode(bl
);
34 void osd_shard_wrapper::encode(bufferlist
& bl
) const
36 ENCODE_START(1, 1, bl
);
42 void osd_shard_wrapper::decode(bufferlist::const_iterator
& bp
)
51 static void encode(const osd_shard_t
& shard
, bufferlist
& bl
) {
52 reinterpret_cast<const osd_shard_wrapper
&>(shard
).encode(bl
);
56 void shard_info_wrapper::set_object(const ScrubMap::object
& object
)
58 for (auto attr
: object
.attrs
) {
60 bl
.push_back(attr
.second
);
61 attrs
.insert(std::make_pair(attr
.first
, std::move(bl
)));
64 if (object
.omap_digest_present
) {
65 omap_digest_present
= true;
66 omap_digest
= object
.omap_digest
;
68 if (object
.digest_present
) {
69 data_digest_present
= true;
70 data_digest
= object
.digest
;
74 void shard_info_wrapper::encode(bufferlist
& bl
) const
76 ENCODE_START(3, 3, bl
);
79 if (!has_shard_missing()) {
82 encode(omap_digest_present
, bl
);
83 encode(omap_digest
, bl
);
84 encode(data_digest_present
, bl
);
85 encode(data_digest
, bl
);
86 encode(selected_oi
, bl
);
91 void shard_info_wrapper::decode(bufferlist::const_iterator
& bp
)
96 if (!has_shard_missing()) {
99 decode(omap_digest_present
, bp
);
100 decode(omap_digest
, bp
);
101 decode(data_digest_present
, bp
);
102 decode(data_digest
, bp
);
103 decode(selected_oi
, bp
);
108 inconsistent_obj_wrapper::inconsistent_obj_wrapper(const hobject_t
& hoid
)
109 : inconsistent_obj_t
{librados::object_id_t
{hoid
.oid
.name
,
111 hoid
.get_key(), hoid
.snap
}}
114 void inconsistent_obj_wrapper::add_shard(const pg_shard_t
& pgs
,
115 const shard_info_wrapper
& shard
)
117 union_shards
.errors
|= shard
.errors
;
118 shards
.emplace(osd_shard_t
{pgs
.osd
, int8_t(pgs
.shard
)}, shard
);
122 inconsistent_obj_wrapper::set_auth_missing(const hobject_t
& hoid
,
123 const map
<pg_shard_t
, ScrubMap
*>& maps
,
124 map
<pg_shard_t
, shard_info_wrapper
> &shard_map
,
125 int &shallow_errors
, int &deep_errors
,
126 const pg_shard_t
&primary
)
128 for (auto pg_map
: maps
) {
129 auto oid_object
= pg_map
.second
->objects
.find(hoid
);
130 shard_map
[pg_map
.first
].primary
= (pg_map
.first
== primary
);
131 if (oid_object
== pg_map
.second
->objects
.end())
132 shard_map
[pg_map
.first
].set_missing();
134 shard_map
[pg_map
.first
].set_object(oid_object
->second
);
135 if (shard_map
[pg_map
.first
].has_deep_errors())
137 else if (shard_map
[pg_map
.first
].has_shallow_errors())
139 union_shards
.errors
|= shard_map
[pg_map
.first
].errors
;
140 shards
.emplace(osd_shard_t
{pg_map
.first
.osd
, pg_map
.first
.shard
}, shard_map
[pg_map
.first
]);
145 static void encode(const shard_info_t
& shard
, bufferlist
& bl
)
147 reinterpret_cast<const shard_info_wrapper
&>(shard
).encode(bl
);
151 void inconsistent_obj_wrapper::encode(bufferlist
& bl
) const
153 ENCODE_START(2, 2, bl
);
158 encode(union_shards
.errors
, bl
);
162 void inconsistent_obj_wrapper::decode(bufferlist::const_iterator
& bp
)
170 decode(union_shards
.errors
, bp
);
174 inconsistent_snapset_wrapper::inconsistent_snapset_wrapper(const hobject_t
& hoid
)
175 : inconsistent_snapset_t
{object_id_t
{hoid
.oid
.name
,
181 using inc_snapset_t
= inconsistent_snapset_t
;
183 void inconsistent_snapset_wrapper::set_headless()
185 errors
|= inc_snapset_t::HEADLESS_CLONE
;
188 void inconsistent_snapset_wrapper::set_snapset_missing()
190 errors
|= inc_snapset_t::SNAPSET_MISSING
;
193 void inconsistent_snapset_wrapper::set_info_missing()
195 errors
|= inc_snapset_t::INFO_MISSING
;
198 void inconsistent_snapset_wrapper::set_snapset_corrupted()
200 errors
|= inc_snapset_t::SNAPSET_CORRUPTED
;
203 void inconsistent_snapset_wrapper::set_info_corrupted()
205 errors
|= inc_snapset_t::INFO_CORRUPTED
;
208 void inconsistent_snapset_wrapper::set_clone_missing(snapid_t snap
)
210 errors
|= inc_snapset_t::CLONE_MISSING
;
211 missing
.push_back(snap
);
214 void inconsistent_snapset_wrapper::set_clone(snapid_t snap
)
216 errors
|= inc_snapset_t::EXTRA_CLONES
;
217 clones
.push_back(snap
);
220 void inconsistent_snapset_wrapper::set_snapset_error()
222 errors
|= inc_snapset_t::SNAP_ERROR
;
225 void inconsistent_snapset_wrapper::set_size_mismatch()
227 errors
|= inc_snapset_t::SIZE_MISMATCH
;
230 void inconsistent_snapset_wrapper::encode(bufferlist
& bl
) const
232 ENCODE_START(2, 1, bl
);
241 void inconsistent_snapset_wrapper::decode(bufferlist::const_iterator
& bp
)
254 void scrub_ls_arg_t::encode(bufferlist
& bl
) const
256 ENCODE_START(1, 1, bl
);
257 encode(interval
, bl
);
258 encode(get_snapsets
, bl
);
259 encode(start_after
.name
, bl
);
260 encode(start_after
.nspace
, bl
);
261 encode(start_after
.snap
, bl
);
262 encode(max_return
, bl
);
266 void scrub_ls_arg_t::decode(bufferlist::const_iterator
& bp
)
269 decode(interval
, bp
);
270 decode(get_snapsets
, bp
);
271 decode(start_after
.name
, bp
);
272 decode(start_after
.nspace
, bp
);
273 decode(start_after
.snap
, bp
);
274 decode(max_return
, bp
);
278 void scrub_ls_result_t::encode(bufferlist
& bl
) const
280 ENCODE_START(1, 1, bl
);
281 encode(interval
, bl
);
286 void scrub_ls_result_t::decode(bufferlist::const_iterator
& bp
)
289 decode(interval
, bp
);