Skip to content

Commit 8e7d63f

Browse files
committed
Avoid a remote call in rabbit_quorum_queue:queue_topology
1 parent 12d2a20 commit 8e7d63f

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

deps/rabbit/src/rabbit_quorum_queue.erl

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2229,10 +2229,24 @@ maybe_log_leader_health_check_result(Result) ->
22292229
-spec queue_topology(amqqueue:amqqueue()) ->
22302230
{Leader :: undefined | node(), Replicas :: [node(),...]}.
22312231
queue_topology(Q) ->
2232-
[{leader, Leader0},
2233-
{members, Members}] = rabbit_queue_type:info(Q, [leader, members]),
2234-
Leader = case Leader0 of
2235-
'' -> undefined;
2236-
_ -> Leader0
2237-
end,
2232+
Leader = case find_leader(Q) of
2233+
undefined ->
2234+
undefined;
2235+
{Name, LeaderNode} ->
2236+
%% double-check the leader is alive if it's supposed to be local
2237+
%% this avoids a remote call, while ensuring we don't claim to be
2238+
%% a leader, if we don't have the leader process running
2239+
case LeaderNode =:= node() of
2240+
true ->
2241+
case whereis(Name) of
2242+
undefined ->
2243+
undefined;
2244+
_Pid ->
2245+
LeaderNode
2246+
end;
2247+
false ->
2248+
LeaderNode
2249+
end
2250+
end,
2251+
Members = get_nodes(Q),
22382252
{Leader, Members}.

0 commit comments

Comments
 (0)