summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@novemberain.com>2018-03-06 23:07:50 +0300
committerGitHub <noreply@github.com>2018-03-06 23:07:50 +0300
commitcb77f6737304946b2a006274eb171901dd369a3f (patch)
treeacf2b5dd7a9fe05260c242fbb0492c057900c5cc /src
parent9b02e69ef5a6b7687e8bd0c7fbce9508bd1c6ee2 (diff)
parent5a0e47143b18b6ae52326ae40bb9b0b4f6ce1cd1 (diff)
downloadrabbitmq-server-git-cb77f6737304946b2a006274eb171901dd369a3f.tar.gz
Merge pull request #1542 from rabbitmq/master-locator-min-masters-group-bindings-3.7v3.7.4
Make min-masters locator count uniqueue queue names instead of bindings 3.7
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_queue_location_min_masters.erl25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/rabbit_queue_location_min_masters.erl b/src/rabbit_queue_location_min_masters.erl
index 5d6f568d4a..c532714d41 100644
--- a/src/rabbit_queue_location_min_masters.erl
+++ b/src/rabbit_queue_location_min_masters.erl
@@ -57,23 +57,26 @@ count_masters(Node, Masters) ->
get_bound_queue_masters_per_vhost([], Acc) ->
lists:flatten(Acc);
get_bound_queue_masters_per_vhost([VHost|RemVHosts], Acc) ->
- Bindings = rabbit_binding:list(VHost),
- BoundQueueMasters = get_queue_master_per_binding(VHost, Bindings, []),
+ BoundQueueNames =
+ lists:filtermap(
+ fun(#binding{destination =#resource{kind = queue,
+ name = QueueName}}) ->
+ {true, QueueName};
+ (_) ->
+ false
+ end,
+ rabbit_binding:list(VHost)),
+ UniqQueueNames = lists:usort(BoundQueueNames),
+ BoundQueueMasters = get_queue_masters(VHost, UniqQueueNames, []),
get_bound_queue_masters_per_vhost(RemVHosts, [BoundQueueMasters|Acc]).
-get_queue_master_per_binding(_VHost, [], BoundQueueNodes) -> BoundQueueNodes;
-get_queue_master_per_binding(VHost, [#binding{destination=
- #resource{kind=queue,
- name=QueueName}}|
- RemBindings],
- QueueMastersAcc) ->
+get_queue_masters(_VHost, [], BoundQueueNodes) -> BoundQueueNodes;
+get_queue_masters(VHost, [QueueName | RemQueueNames], QueueMastersAcc) ->
QueueMastersAcc0 = case rabbit_queue_master_location_misc:lookup_master(
QueueName, VHost) of
{ok, Master} when is_atom(Master) ->
[Master|QueueMastersAcc];
_ -> QueueMastersAcc
end,
- get_queue_master_per_binding(VHost, RemBindings, QueueMastersAcc0);
-get_queue_master_per_binding(VHost, [_|RemBindings], QueueMastersAcc) ->
- get_queue_master_per_binding(VHost, RemBindings, QueueMastersAcc).
+ get_queue_masters(VHost, RemQueueNames, QueueMastersAcc0).