MCPcopy Create free account
hub / github.com/ceph/ceph / decode

Method decode

src/test/erasure-code/ceph_erasure_code_benchmark.cc:260–326  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

258}
259
260int ErasureCodeBench::decode()
261{
262 ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
263 ErasureCodeInterfaceRef erasure_code;
264 stringstream messages;
265 int code = instance.factory(plugin,
266 g_conf().get_val<std::string>("erasure_code_dir"),
267 profile, &erasure_code, &messages);
268 if (code) {
269 cerr << messages.str() << std::endl;
270 return code;
271 }
272
273 bufferlist in;
274 in.append(string(in_size, 'X'));
275 in.rebuild_aligned(ErasureCode::SIMD_ALIGN);
276
277 shard_id_set want_to_encode;
278 for (shard_id_t i; i < k + m; ++i) {
279 want_to_encode.insert(i);
280 }
281
282 shard_id_map<bufferlist> encoded(erasure_code->get_chunk_count());
283 code = erasure_code->encode(want_to_encode, in, &encoded);
284 if (code)
285 return code;
286
287 shard_id_set want_to_read = want_to_encode;
288
289 if (erased.size() > 0) {
290 for (vector<int>::const_iterator i = erased.begin();
291 i != erased.end();
292 ++i)
293 encoded.erase(shard_id_t(*i));
294 display_chunks(encoded, erasure_code->get_chunk_count());
295 }
296
297 utime_t begin_time = ceph_clock_now();
298 for (int i = 0; i < max_iterations; i++) {
299 if (exhaustive_erasures) {
300 code = decode_erasures(encoded, encoded, shard_id_t(0), erasures, erasure_code);
301 if (code)
302 return code;
303 } else if (erased.size() > 0) {
304 shard_id_map<bufferlist> decoded(erasure_code->get_chunk_count());
305 code = erasure_code->decode(want_to_read, encoded, &decoded, 0);
306 if (code)
307 return code;
308 } else {
309 shard_id_map<bufferlist> chunks = encoded;
310 for (int j = 0; j < erasures; j++) {
311 int erasure;
312 do {
313 erasure = rand() % ( k + m );
314 } while(chunks.count(shard_id_t(erasure)) == 0);
315 chunks.erase(shard_id_t(erasure));
316 }
317 shard_id_map<bufferlist> decoded(erasure_code->get_chunk_count());

Callers 6

TESTFunction · 0.45
decode_erasuresMethod · 0.45
TESTFunction · 0.45
TESTFunction · 0.45
decode_erasuresMethod · 0.45
TEST_PFunction · 0.45

Calls 15

instanceClass · 0.85
display_chunksFunction · 0.85
ceph_clock_nowFunction · 0.85
rebuild_alignedMethod · 0.80
shard_id_tClass · 0.50
factoryMethod · 0.45
strMethod · 0.45
appendMethod · 0.45
insertMethod · 0.45
get_chunk_countMethod · 0.45
encodeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected