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 | 40db7dd8a3a445e236170c7e2fd1c7b2ec6b465d (patch) | |
tree | 9b391ba775bdac94130336857f40ee12996ae6b0 | |
parent | 81a89ba1bf054837ea3a9a27a99fedce58a2ffbc (diff) | |
parent | 7743428ea01da0db13220981aa9b1021920ece07 (diff) | |
download | rabbitmq-server-40db7dd8a3a445e236170c7e2fd1c7b2ec6b465d.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 11abe73b..8e64f3d0 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 71fd7a17..e3e89211 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) -> |