From: Samuel Just Date: Fri, 30 Sep 2022 23:12:22 +0000 (+0000) Subject: crimson/osd/replicated_backend: block _submit_transaction on sending the messages X-Git-Tag: v18.1.0~1058^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2b68018a8554ca27329554fa8159b322c88816e8;p=ceph.git crimson/osd/replicated_backend: block _submit_transaction on sending the messages Otherwise, the send operations can reorder. Fixes: https://tracker.ceph.com/issues/57738 Signed-off-by: Samuel Just --- diff --git a/src/crimson/osd/replicated_backend.cc b/src/crimson/osd/replicated_backend.cc index 894d60675297..119d7278ef6e 100644 --- a/src/crimson/osd/replicated_backend.cc +++ b/src/crimson/osd/replicated_backend.cc @@ -81,6 +81,7 @@ ReplicatedBackend::_submit_transaction(std::set&& pg_shards, return seastar::make_ready_future(std::move(acked_peers)); }); + auto sends = std::make_unique>>(); for (auto pg_shard : pg_shards) { if (pg_shard != whoami) { auto m = crimson::make_message( @@ -100,10 +101,13 @@ ReplicatedBackend::_submit_transaction(std::set&& pg_shards, m->min_last_complete_ondisk = osd_op_p.min_last_complete_ondisk; m->set_rollback_to(osd_op_p.at_version); // TODO: set more stuff. e.g., pg_states - (void) shard_services.send_to_osd(pg_shard.osd, std::move(m), map_epoch); + sends->emplace_back(shard_services.send_to_osd(pg_shard.osd, std::move(m), map_epoch)); } } - return {seastar::now(), std::move(all_completed)}; + auto sends_complete = seastar::when_all_succeed( + sends->begin(), sends->end() + ).finally([sends=std::move(sends)] {}); + return {std::move(sends_complete), std::move(all_completed)}; } void ReplicatedBackend::on_actingset_changed(peering_info_t pi)