diff options
| author | Ayanda Dube <ayanda.dube@erlang-solutions.com> | 2015-07-13 17:18:56 +0100 |
|---|---|---|
| committer | Ayanda Dube <ayanda.dube@erlang-solutions.com> | 2015-07-13 17:18:56 +0100 |
| commit | 2ed519b82803b2902bfcb31cc423de7f0844e192 (patch) | |
| tree | aaa38cbde63173c5e730e24fb0313b0cf39859be /src | |
| parent | 9262a96f672c6b2ebf8a0de6fe6e0e85ab232284 (diff) | |
| download | rabbitmq-server-git-2ed519b82803b2902bfcb31cc423de7f0844e192.tar.gz | |
Simplifies min-masters helper functions
References #121
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_queue_location_min_masters.erl | 23 |
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). |
