diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2010-12-20 13:02:12 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2010-12-20 13:02:12 +0000 |
| commit | d94c5fcfe3ad6ce67e27839b74a274b8c562b891 (patch) | |
| tree | 9b391ba775bdac94130336857f40ee12996ae6b0 | |
| parent | 408b6d4c9412decce732e4d35c6751420bbfa8cc (diff) | |
| parent | a1b63d6cbe42bbc8da8c23b0dff32d7e69bb3db8 (diff) | |
| download | rabbitmq-server-git-d94c5fcfe3ad6ce67e27839b74a274b8c562b891.tar.gz | |
Merge bug23358 into default
| -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) -> |
