From: Radoslaw Zarzynski Date: Tue, 26 Mar 2024 14:24:59 +0000 (+0000) Subject: crimson/osd: implement ECRecoveryBackend::recover_object() X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3421c71a3e46633ddf836f634577c8eb03e9cdaa;p=ceph-ci.git crimson/osd: implement ECRecoveryBackend::recover_object() Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ec_recovery_backend.cc b/src/crimson/osd/ec_recovery_backend.cc index a8721734fa8..33f4276a34f 100644 --- a/src/crimson/osd/ec_recovery_backend.cc +++ b/src/crimson/osd/ec_recovery_backend.cc @@ -42,7 +42,30 @@ ECRecoveryBackend::recover_object( eversion_t need) { logger().debug("{}: {}, {}", __func__, soid, need); - return seastar::now(); + // always add_recovering(soid) before recover_object(soid) + assert(is_recovering(soid)); + return pg.obc_loader.with_obc(soid, + [this, soid, need](auto head, auto obc) { + logger().debug("recover_object: loaded obc: {}", obc->obs.oi.soid); + auto& recovery_waiter = get_recovering(soid); + recovery_waiter.obc = obc; + recovery_waiter.obc->wait_recovery_read(); + //logger().info("{}: starting {}", __func__, rop); + assert(!recovery_ops.count(soid)); + recovery_ops[soid] = + ECCommon::RecoveryBackend::recover_object(soid, need, head, obc); + assert(soid == recovery_ops[soid].hoid); + RecoveryMessages m; + continue_recovery_op(recovery_ops[soid], &m); + dispatch_recovery_messages(m, 0/* FIXME: priority */); + return seastar::now(); + }).handle_error_interruptible( + crimson::osd::PG::load_obc_ertr::all_same_way([soid](auto& code) { + // TODO: may need eio handling? + logger().error("recover_object saw error code {}, ignoring object {}", + code, soid); + return seastar::now(); + })); } void ECRecoveryBackend::commit_txn_send_replies(