diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/delegate.erl | 8 | ||||
| -rw-r--r-- | src/rabbit_amqqueue.erl | 10 |
2 files changed, 12 insertions, 6 deletions
diff --git a/src/delegate.erl b/src/delegate.erl index 11abe73b0d..8e64f3d078 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -31,6 +31,14 @@ -module(delegate). +%% The reason we have local delegate processes is because we want to +%% be able to issue calls to remote nodes in parallel. This requires +%% segmenting the destination Pids by node, and then getting local +%% delegates to issue calls/casts to the remote delegates in +%% parallel. In order to ensure consistent ordering, even casts to +%% remote Pids have to go through the local delegates rather than be +%% sent directly. + -define(DELEGATE_PROCESS_COUNT_MULTIPLIER, 2). -behaviour(gen_server2). diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 71fd7a17db..e3e89211b5 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -503,15 +503,13 @@ pseudo_queue(QueueName, Pid) -> pid = Pid}. safe_delegate_call_ok(F, Pids) -> - {_, Bad} = delegate:invoke(Pids, - fun (Pid) -> + case delegate:invoke(Pids, fun (Pid) -> rabbit_misc:with_exit_handler( fun () -> ok end, fun () -> F(Pid) end) - end), - case Bad of - [] -> ok; - _ -> {error, Bad} + end) of + {_, []} -> ok; + {_, Bad} -> {error, Bad} end. delegate_call(Pid, Msg, Timeout) -> |
