summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_queue_location_min_masters.erl23
1 files changed, 5 insertions, 18 deletions
diff --git a/src/rabbit_queue_location_min_masters.erl b/src/rabbit_queue_location_min_masters.erl
index c6c10cc34b..98a61284e6 100644
--- a/src/rabbit_queue_location_min_masters.erl
+++ b/src/rabbit_queue_location_min_masters.erl
@@ -41,25 +41,17 @@ queue_master_location(#amqqueue{}) ->
Cluster = rabbit_queue_master_location_misc:all_nodes(),
VHosts = rabbit_vhost:list(),
BoundQueueMasters = get_bound_queue_masters_per_vhost(VHosts, []),
- {_Count, MinMaster}= get_min_master(Cluster, BoundQueueMasters,
- {undefined, undefined}),
+ {_Count, MinMaster}= get_min_master(Cluster, BoundQueueMasters),
{ok, MinMaster}.
%%---------------------------------------------------------------------------
%% Private helper functions
%%---------------------------------------------------------------------------
+get_min_master(Cluster, BoundQueueMasters) ->
+ lists:min([ {count_masters(Node, BoundQueueMasters), Node} || Node <- Cluster ]).
-get_min_master([], _BoundQueueMasters, MinNode) -> MinNode;
-get_min_master([Node|Rem], BoundQueueMasters, {undefined, undefined}) ->
- Count = count_masters(Node, BoundQueueMasters, 0),
- get_min_master(Rem, BoundQueueMasters, {Count, Node});
-get_min_master([Node0|Rem], BoundQueueMasters, MinNode={Count, _Node}) ->
- Count0 = count_masters(Node0, BoundQueueMasters, 0),
- MinNode0 = if Count0 < Count -> {Count0, Node0};
- true -> MinNode
- end,
- get_min_master(Rem, BoundQueueMasters, MinNode0).
-
+count_masters(Node, Masters) ->
+ length([ X || X <- Masters, X == Node ]).
get_bound_queue_masters_per_vhost([], Acc) ->
lists:flatten(Acc);
@@ -79,8 +71,3 @@ get_queue_master_per_binding(VHost, [#binding{key=QueueName}|RemBindings],
_ -> QueueMastersAcc
end,
get_queue_master_per_binding(VHost, RemBindings, QueueMastersAcc0).
-
-
-count_masters(_Node, [], Count) -> Count;
-count_masters(Node, [Node|T], Count) -> count_masters(Node, T, Count+1);
-count_masters(Node, [_|T], Count) -> count_masters(Node, T, Count).