]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
common/async: async_cond::notify/cancel must post to handler's associated executor
authorShilpa Jagannath <smanjara@redhat.com>
Fri, 5 Jun 2026 18:42:35 +0000 (14:42 -0400)
committerCasey Bodley <cbodley@redhat.com>
Thu, 25 Jun 2026 14:53:45 +0000 (10:53 -0400)
commit83f2ee9537d31b4b68b5ea9c5b6febb5bae0d36a
treedfef7d991ee907b7df3e8652f7d698b2bee50aa9
parentf72d676118b34e0efa4fa3db7562a9a41e23b66a
common/async: async_cond::notify/cancel must post to handler's associated executor

RGWDeleteMultiObj spawns child coroutines via spawn_throttle to delete
objects in parallel. each child coroutine carries the connection strand
as its associated executor, serializing concurrent operations on shared
state like the response formatter and ops_log_entries.

but in multisite env, concurrent deletions in the same bucket shard
contend on async_cond in RGWDataChangesLog::add_entry(). when notify()
fires, waiting coroutines resume on the raw io_context executor
instead of their connection strand, breaking the serialization that prevents data
races in send_partial_response()

any_completion_handler doesn't support post(). so post() to the
default executor and dispatch to the associated executor from there

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
(cherry picked from commit 04aceefad0ef2b0186b0854ae28b4fbc4ffa51c3)
src/common/async/async_cond.h