Skip to content

Commit

Permalink
Avoid expensive rabbit_nodes:list_running()
Browse files Browse the repository at this point in the history
for non-mirrored queues
  • Loading branch information
ansd committed Dec 12, 2023
1 parent 4609be4 commit 4eb6ab7
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions deps/rabbit/src/rabbit_mirror_queue_misc.erl
Original file line number Diff line number Diff line change
Expand Up @@ -609,33 +609,43 @@ promote_slave([SPid | SPids]) ->
-spec initial_queue_node(amqqueue:amqqueue(), node()) -> node().

initial_queue_node(Q, DefNode) ->
{MNode, _SNodes} = suggested_queue_nodes(Q, DefNode, rabbit_nodes:list_running()),
{MNode, _SNodes} = suggested_queue_nodes(Q, DefNode, fun rabbit_nodes:list_running/0),
MNode.

-spec suggested_queue_nodes(amqqueue:amqqueue()) ->
{node(), [node()]}.

suggested_queue_nodes(Q) -> suggested_queue_nodes(Q, rabbit_nodes:list_running()).
suggested_queue_nodes(Q) -> suggested_queue_nodes(Q, fun rabbit_nodes:list_running/0).
suggested_queue_nodes(Q, All) -> suggested_queue_nodes(Q, node(), All).

%% The third argument exists so we can pull a call to
%% rabbit_nodes:list_running() out of a loop or transaction
%% or both.
suggested_queue_nodes(Q, DefNode, All) when ?is_amqqueue(Q) ->
-spec suggested_queue_nodes(amqqueue:amqqueue(), node(), Nodes | fun(() -> Nodes)) ->
{node(), Nodes} when
Nodes :: [node()].
suggested_queue_nodes(Q, DefNode, AllNodes) when ?is_amqqueue(Q) ->
Owner = amqqueue:get_exclusive_owner(Q),
{MNode0, SNodes, SSNodes} = actual_queue_nodes(Q),
MNode = case MNode0 of
none -> DefNode;
_ -> MNode0
end,
case Owner of
none -> Params = policy(<<"ha-params">>, Q),
case module(Q) of
{ok, M} -> M:suggested_queue_nodes(
Params, MNode, SNodes, SSNodes, All);
_ -> {MNode, []}
end;
_ -> {MNode, []}
none ->
case module(Q) of
{ok, M} ->
Params = policy(<<"ha-params">>, Q),
All = if is_list(AllNodes) -> AllNodes;
is_function(AllNodes) -> AllNodes()
end,
M:suggested_queue_nodes(
Params, MNode, SNodes, SSNodes, All);
_ ->
{MNode, []}
end;
_ ->
{MNode, []}
end.

policy(Policy, Q) ->
Expand Down

0 comments on commit 4eb6ab7

Please # to comment.