summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@lshift.net>2010-05-05 16:42:37 +0100
committerMatthew Sackman <matthew@lshift.net>2010-05-05 16:42:37 +0100
commit8be651e13c20b14f823a3eb8ff90237db750c391 (patch)
treecd2ad1c409a89a67d9b2d13c1991ff1ce5620a19
parentb13fede8cbcab7290d0f07c813c62c1281c56c5a (diff)
downloadrabbitmq-server-bug19844.tar.gz
Cosmeticsbug19844
-rw-r--r--src/delegate.erl13
-rw-r--r--src/rabbit_amqqueue.erl4
-rw-r--r--src/rabbit_tests.erl3
3 files changed, 8 insertions, 12 deletions
diff --git a/src/delegate.erl b/src/delegate.erl
index a264d60c..6e5519b8 100644
--- a/src/delegate.erl
+++ b/src/delegate.erl
@@ -108,7 +108,7 @@ split_delegate_per_node(Pids) ->
orddict:new(), Pids)).
invoke_per_node([{Node, Pids}], Fun) when Node == node() ->
- local_delegate(Pids, Fun);
+ safe_invoke(Pids, Fun);
invoke_per_node(NodePids, Fun) ->
lists:append(delegate_per_node(NodePids, Fun, fun internal_call/2)).
@@ -118,14 +118,11 @@ invoke_no_result_per_node([{Node, Pids}], Fun) when Node == node() ->
%% I don't think it's a problem unless someone misuses this
%% function. Making this *actually* async would be painful as we
%% can't spawn at this point or we break effect ordering.
- local_delegate(Pids, Fun);
+ safe_invoke(Pids, Fun);
invoke_no_result_per_node(NodePids, Fun) ->
delegate_per_node(NodePids, Fun, fun internal_cast/2),
ok.
-local_delegate(Pids, Fun) ->
- [safe_invoke(Fun, Pid) || Pid <- Pids].
-
delegate_per_node(NodePids, Fun, DelegateFun) ->
Self = self(),
%% Note that this is unsafe if the Fun requires reentrancy to the
@@ -136,7 +133,7 @@ delegate_per_node(NodePids, Fun, DelegateFun) ->
{thunk, fun() ->
Self ! {result,
DelegateFun(
- Node, fun() -> local_delegate(Pids, Fun) end)}
+ Node, fun() -> safe_invoke(Pids, Fun) end)}
end}) || {Node, Pids} <- NodePids],
[receive {result, Result} -> Result end || _ <- NodePids].
@@ -168,7 +165,9 @@ remote_server(Node) ->
server(Hash) ->
list_to_atom("delegate_process_" ++ integer_to_list(Hash)).
-safe_invoke(Fun, Pid) ->
+safe_invoke(Pids, Fun) when is_list(Pids) ->
+ [safe_invoke(Pid, Fun) || Pid <- Pids];
+safe_invoke(Pid, Fun) when is_pid(Pid) ->
try
{ok, Fun(Pid), Pid}
catch
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 4a9cf9b4..6eb7237b 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -378,8 +378,8 @@ safe_delegate_call_ok(H, F, Pids) ->
fun () -> F(Pid) end)
end),
case Bad of
- [] -> ok;
- Errors -> {error, Errors}
+ [] -> ok;
+ _ -> {error, Bad}
end.
delegate_call(Pid, Msg, Timeout) ->
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index 5451e7d1..95ea15c5 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -908,9 +908,7 @@ test_delegates_sync(SecondaryNode) ->
RemoteBadPids = spawn_responders(SecondaryNode, Responder, 2),
{GoodRes, []} = delegate:invoke(LocalGoodPids ++ RemoteGoodPids, Sender),
-
true = lists:all(fun ({_, response}) -> true end, GoodRes),
-
GoodResPids = [Pid || {Pid, _} <- GoodRes],
Good = ordsets:from_list(LocalGoodPids ++ RemoteGoodPids),
@@ -925,7 +923,6 @@ test_delegates_sync(SecondaryNode) ->
passed.
-
%---------------------------------------------------------------------
control_action(Command, Args) -> control_action(Command, node(), Args).