From: Radoslaw Zarzynski Date: Tue, 26 Mar 2024 14:25:18 +0000 (+0000) Subject: crimson/osd: implement ECRecoveryBackend::commit_txn_send_replies() X-Git-Tag: v21.0.0~3^2~54 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e995493bfdcd76688bd1b7c26509bd427e5a9038;p=ceph.git crimson/osd: implement ECRecoveryBackend::commit_txn_send_replies() This bypasses the crimson-msgr for local ops. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/ec_recovery_backend.cc b/src/crimson/osd/ec_recovery_backend.cc index 33f4276a34f6..a258098a8b36 100644 --- a/src/crimson/osd/ec_recovery_backend.cc +++ b/src/crimson/osd/ec_recovery_backend.cc @@ -72,6 +72,22 @@ void ECRecoveryBackend::commit_txn_send_replies( ceph::os::Transaction&& txn, std::map replies) { + std::ignore = shard_services.get_store().do_transaction( + ::RecoveryBackend::coll, std::move(txn) + ).then([replies=std::move(replies), this]() mutable { + if (auto msgit = replies.find(get_parent()->whoami_shard().osd); + msgit != std::end(replies)) { + std::ignore = handle_push_reply(Ref{msgit->second}); + replies.erase(msgit); + } + return seastar::do_for_each(replies, [this] (auto&& kv) { + auto [osd, msg] = kv; + return pg.get_shard_services().send_to_osd( + osd, + MessageURef{msg}, + pg.get_osdmap_epoch()); + }); + }); } RecoveryBackend::interruptible_future<>