Skip to content

Commit 1d413ea

Browse files
committed
Make min-masters locator count uniqueue queue names instead of bindings.
Fixes #1519 Min-masters locator was counting bindings instead of bound queues, which caused #1519 Unique queue name counting is what documentation implies.
1 parent e3ba0b5 commit 1d413ea

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

src/rabbit_queue_location_min_masters.erl

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,26 @@ count_masters(Node, Masters) ->
5757
get_bound_queue_masters_per_vhost([], Acc) ->
5858
lists:flatten(Acc);
5959
get_bound_queue_masters_per_vhost([VHost|RemVHosts], Acc) ->
60-
Bindings = rabbit_binding:list(VHost),
61-
BoundQueueMasters = get_queue_master_per_binding(VHost, Bindings, []),
60+
BoundQueueNames =
61+
lists:filtermap(
62+
fun(#binding{destination =#resource{kind = queue,
63+
name = QueueName}}) ->
64+
{true, QueueName};
65+
(_) ->
66+
false
67+
end,
68+
rabbit_binding:list(VHost)),
69+
UniqQueueNames = lists:usort(BoundQueueNames),
70+
BoundQueueMasters = get_queue_masters(VHost, UniqQueueNames, []),
6271
get_bound_queue_masters_per_vhost(RemVHosts, [BoundQueueMasters|Acc]).
6372

6473

65-
get_queue_master_per_binding(_VHost, [], BoundQueueNodes) -> BoundQueueNodes;
66-
get_queue_master_per_binding(VHost, [#binding{destination=
67-
#resource{kind=queue,
68-
name=QueueName}}|
69-
RemBindings],
70-
QueueMastersAcc) ->
74+
get_queue_masters(_VHost, [], BoundQueueNodes) -> BoundQueueNodes;
75+
get_queue_masters(VHost, [QueueName | RemQueueNames], QueueMastersAcc) ->
7176
QueueMastersAcc0 = case rabbit_queue_master_location_misc:lookup_master(
7277
QueueName, VHost) of
7378
{ok, Master} when is_atom(Master) ->
7479
[Master|QueueMastersAcc];
7580
_ -> QueueMastersAcc
7681
end,
77-
get_queue_master_per_binding(VHost, RemBindings, QueueMastersAcc0);
78-
get_queue_master_per_binding(VHost, [_|RemBindings], QueueMastersAcc) ->
79-
get_queue_master_per_binding(VHost, RemBindings, QueueMastersAcc).
82+
get_queue_masters(VHost, RemQueueNames, QueueMastersAcc0).

0 commit comments

Comments
 (0)