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

Method handle_sub_write

src/osd/ECBackend.cc:387–515  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

385}
386
387void ECBackend::handle_sub_write(
388 pg_shard_t from,
389 OpRequestRef msg,
390 ECSubWrite &op,
391 const ZTracer::Trace &trace,
392 ECListener &) {
393 if (msg) {
394 msg->mark_event("sub_op_started");
395 }
396 trace.event("handle_sub_write");
397
398 if (cct->_conf->bluestore_debug_inject_read_err &&
399 ECInject::test_write_error3(op.soid)) {
400 ceph_abort_msg("Error inject - OSD down");
401 }
402 if (!get_parent()->pgb_is_primary())
403 get_parent()->update_stats(op.stats);
404 ObjectStore::Transaction localt;
405 if (!op.temp_added.empty()) {
406 switcher->add_temp_objs(op.temp_added);
407 }
408 if (op.backfill_or_async_recovery) {
409 for (set<hobject_t>::iterator i = op.temp_removed.begin();
410 i != op.temp_removed.end();
411 ++i) {
412 dout(10) << __func__ << ": removing object " << *i
413 << " since we won't get the transaction" << dendl;
414 localt.remove(
415 switcher->coll,
416 ghobject_t(
417 *i,
418 ghobject_t::NO_GEN,
419 get_parent()->whoami_shard().shard));
420 }
421 }
422 switcher->clear_temp_objs(op.temp_removed);
423 dout(30) << __func__ << " missing before " <<
424 get_parent()->get_log().get_missing().get_items() << dendl;
425
426 // Update EC omap journal on non-primary shards from log entries
427 // This ensures the journal has the correct generation info when transactions are applied
428 if (get_parent()->get_pool().supports_omap()) {
429 for (auto &&e: op.log_entries) {
430 if (e.is_delete() || e.is_lost_delete() || e.is_replace() || (e.is_clone() && !e.soid.is_snap())) {
431 if (!op.backfill_or_async_recovery) {
432 ec_omap_journal.append_delete(e.soid, e.version.version, e.is_lost_delete());
433 dout(20) << __func__ << " appending delete to journal: "
434 << (e.is_clone() ? "clone" : "delete")
435 << " " << e.soid << " version=" << e.version.version
436 << " lost_delete=" << e.is_lost_delete() << dendl;
437 } else {
438 dout(20) << __func__ << " skipping journal append_delete during backfill/recovery: "
439 << (e.is_clone() ? "clone" : "delete")
440 << " " << e.soid << " version=" << e.version.version
441 << " lost_delete=" << e.is_lost_delete() << dendl;
442 }
443 }
444 }

Callers

nothing calls this directly

Calls 15

test_write_error3Function · 0.85
ghobject_tClass · 0.85
mark_eventMethod · 0.80
add_temp_objsMethod · 0.80
get_logMethod · 0.80
supports_omapMethod · 0.80
is_lost_deleteMethod · 0.80
is_replaceMethod · 0.80
append_deleteMethod · 0.80
set_fadvise_flagMethod · 0.80
eversion_tClass · 0.70
get_parentFunction · 0.50

Tested by

no test coverage detected