From: Radosław Zarzyński Date: Wed, 22 Nov 2023 16:53:31 +0000 (+0100) Subject: crimson/osd: drop the green thread for ECBackend::submit_transaction() X-Git-Tag: v21.0.0~3^2~68 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5845d1268463c09aa93ee82f8f0b8ed65e190382;p=ceph.git crimson/osd: drop the green thread for ECBackend::submit_transaction() Signed-off-by: Radosław Zarzyński --- diff --git a/src/crimson/osd/ec_backend.cc b/src/crimson/osd/ec_backend.cc index 619c5fabbe56..7de7eacb20e7 100644 --- a/src/crimson/osd/ec_backend.cc +++ b/src/crimson/osd/ec_backend.cc @@ -267,53 +267,37 @@ ECBackend::submit_transaction(const std::set &pg_shards, { const hobject_t& hoid = obc->obs.oi.soid; logger().debug("ECBackend::{} hoid={}", __func__, hoid); + auto op = std::make_unique(std::move(txn), std::move(obc)); + op->hoid = hoid; + //op->delta_stats = delta_stats; + op->version = osd_op_p.at_version; + op->trim_to = osd_op_p.pg_trim_to; + op->pg_committed_to = + std::max(osd_op_p.pg_committed_to, rmw_pipeline.committed_to); + op->log_entries = std::move(log_entries); + //std::swap(op->updated_hit_set_history, hset_history); + auto on_all_commit = new C_AllSubWritesCommited; + op->on_all_commit = on_all_commit; + op->tid = shard_services.get_tid(); + op->reqid = osd_op_p.req_id; + op->client_op = nullptr; //client_op; + //if (client_op) { + // op->trace = client_op->pg_trace; + //} + op->plan = op->get_write_plan( + sinfo, + *(op->t), + &dpp); + logger().info("{}: op {} starting", "_submit_transaction", ""); //*op); + rmw_pipeline.start_rmw(std::move(op)); + logger().debug("ECBackend::{} started ec op", "_submit_transaction"); return make_ready_future( - seastar::now(), - PGBackend::interruptor::async([=, this, - txn=std::move(txn), - osd_op_p=std::move(osd_op_p)]() mutable { - logger().debug("ECBackend::{} LINE {}", "_submit_transaction", __LINE__); - auto op = std::make_unique(std::move(txn), std::move(obc)); - logger().debug("ECBackend::{} LINE {}", "_submit_transaction", __LINE__); - op->hoid = hoid; - //op->delta_stats = delta_stats; - op->version = osd_op_p.at_version; - op->trim_to = osd_op_p.pg_trim_to; - op->pg_committed_to = - std::max(osd_op_p.pg_committed_to, rmw_pipeline.committed_to); - op->log_entries = std::move(log_entries); - //std::swap(op->updated_hit_set_history, hset_history); - // TODO: promsie future here - auto on_all_commit = new C_AllSubWritesCommited; - op->on_all_commit = on_all_commit; - op->tid = shard_services.get_tid(); - op->reqid = osd_op_p.req_id; - op->client_op = nullptr; //client_op; - //if (client_op) { - // op->trace = client_op->pg_trace; - //} - op->plan = op->get_write_plan( - sinfo, - *(op->t), - [this](const hobject_t &i) { - ECUtil::HashInfoRef ref = - get_hash_info(i, true).handle_error_interruptible( - crimson::ct_error::assert_all{} - ).get(); - logger().debug("ECBackend::{} LINE {}", "_submit_transaction", __LINE__); - ceph_assert_always(ref); - return ref; - }, - &dpp); - logger().info("{}: op {} starting", "_submit_transaction", ""); //*op); - rmw_pipeline.start_rmw(std::move(op)); - logger().debug("ECBackend::{} started ec op", "_submit_transaction"); - on_all_commit->get_future().get(); - logger().debug("ECBackend::{} LINE {}", "_submit_transaction", __LINE__); - }).then_interruptible([] { - logger().debug("ECBackend::{} LINE {}", "_submit_transaction", __LINE__); - return seastar::now(); - })}; + seastar::now(), + on_all_commit->get_future().then_interruptible([] { + logger().debug("{}: op {} finished completely", "_submit_transaction", ""); + return seastar::now(); + }) + ); } ECBackend::write_iertr::future<>