From 5963dba0a34e5ad050b76e6009f4b92cb7dea323 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 23 Jul 2024 21:56:39 -0700 Subject: [PATCH] crimson/osd/pg: convert PG::handle_rep_op to coroutine Signed-off-by: Samuel Just --- src/crimson/osd/pg.cc | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 21b1e5db66a..291385de649 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -27,6 +27,7 @@ #include "os/Transaction.h" +#include "crimson/common/coroutine.h" #include "crimson/common/exception.h" #include "crimson/common/log.h" #include "crimson/net/Connection.h" @@ -1442,7 +1443,7 @@ PG::interruptible_future<> PG::handle_rep_op(Ref req) LOG_PREFIX(PG::handle_rep_op); DEBUGDPP("{}", *this, *req); if (can_discard_replica_op(*req)) { - return seastar::now(); + co_return; } ceph::os::Transaction txn; @@ -1460,17 +1461,22 @@ PG::interruptible_future<> PG::handle_rep_op(Ref req) txn, false); DEBUGDPP("{} do_transaction", *this, *req); - return interruptor::make_interruptible(shard_services.get_store().do_transaction( - coll_ref, std::move(txn))).then_interruptible( - [req, lcod=peering_state.get_info().last_complete, this] { - peering_state.update_last_complete_ondisk(lcod); - const auto map_epoch = get_osdmap_epoch(); - auto reply = crimson::make_message( - req.get(), pg_whoami, 0, - map_epoch, req->get_min_epoch(), CEPH_OSD_FLAG_ONDISK); - reply->set_last_complete_ondisk(lcod); - return shard_services.send_to_osd(req->from.osd, std::move(reply), map_epoch); - }); + co_await interruptor::make_interruptible( + shard_services.get_store().do_transaction(coll_ref, std::move(txn)) + ); + + const auto &lcod = peering_state.get_info().last_complete; + peering_state.update_last_complete_ondisk(lcod); + const auto map_epoch = get_osdmap_epoch(); + auto reply = crimson::make_message( + req.get(), pg_whoami, 0, + map_epoch, req->get_min_epoch(), CEPH_OSD_FLAG_ONDISK); + reply->set_last_complete_ondisk(lcod); + co_await interruptor::make_interruptible( + shard_services.send_to_osd(req->from.osd, std::move(reply), map_epoch) + ); + co_return; +} } void PG::log_operation( -- 2.39.5