summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2010-12-20 13:02:12 +0000
committerSimon MacMullen <simon@rabbitmq.com>2010-12-20 13:02:12 +0000
commit40db7dd8a3a445e236170c7e2fd1c7b2ec6b465d (patch)
tree9b391ba775bdac94130336857f40ee12996ae6b0
parent81a89ba1bf054837ea3a9a27a99fedce58a2ffbc (diff)
parent7743428ea01da0db13220981aa9b1021920ece07 (diff)
downloadrabbitmq-server-40db7dd8a3a445e236170c7e2fd1c7b2ec6b465d.tar.gz
Merge bug23358 into default
-rw-r--r--src/delegate.erl8
-rw-r--r--src/rabbit_amqqueue.erl10
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) ->