summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@lshift.net>2010-04-28 11:06:01 +0100
committerSimon MacMullen <simon@lshift.net>2010-04-28 11:06:01 +0100
commit8aaca240ce09e25b118f5c943f5edfa894bfacdf (patch)
tree735c345273e57612396c011c95ee9bfadea16cdc
parent33303726a2eba1a29c9319f76d970e04d85f96a3 (diff)
downloadrabbitmq-server-8aaca240ce09e25b118f5c943f5edfa894bfacdf.tar.gz
Cache the actual delegate process name, not the result of process_count.
-rw-r--r--src/delegate.erl29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/delegate.erl b/src/delegate.erl
index 5907eb09..1bc788f8 100644
--- a/src/delegate.erl
+++ b/src/delegate.erl
@@ -139,7 +139,20 @@ delegate_per_node(NodePids, FPid, DelegateFun) ->
|| {Node, Pids} <- NodePids]).
server(Node) when is_atom(Node) ->
- server(erlang:phash2(self(), process_count(Node)));
+ case get({delegate_server_name, Node}) of
+ undefined ->
+ case rpc:call(Node, delegate, process_count, []) of
+ {badrpc, _} ->
+ delegate_process_1; % Have to return something, if we're
+ % just casting then we don't want to
+ % blow up
+ Count ->
+ Name = server(erlang:phash2(self(), Count)),
+ put({delegate_server_name, Node}, Name),
+ Name
+ end;
+ Name -> Name
+ end;
server(Hash) ->
list_to_atom("delegate_process_" ++ integer_to_list(Hash)).
@@ -152,20 +165,6 @@ safe_invoke(FPid, Pid) ->
{ok, Result, Pid}
end.
-process_count(Node) ->
- case get({process_count, Node}) of
- undefined ->
- case rpc:call(Node, delegate, process_count, []) of
- {badrpc, _} ->
- 1; % Have to return something, if we're just casting then
- % we don't want to blow up
- Count ->
- put({process_count, Node}, Count),
- Count
- end;
- Count -> Count
- end.
-
process_count() ->
?DELEGATE_PROCESS_COUNT_MULTIPLIER * erlang:system_info(schedulers).