Skip to content

Commit 59fa54b

Browse files
committed
Avoid a remote call in rabbit_quorum_queue:queue_topology
1 parent 864e90c commit 59fa54b

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
@@ -2228,10 +2228,24 @@ maybe_log_leader_health_check_result(Result) ->
22282228
-spec queue_topology(amqqueue:amqqueue()) ->
22292229
{Leader :: undefined | node(), Replicas :: [node(),...]}.
22302230
queue_topology(Q) ->
2231-
[{leader, Leader0},
2232-
{members, Members}] = rabbit_queue_type:info(Q, [leader, members]),
2233-
Leader = case Leader0 of
2234-
'' -> undefined;
2235-
_ -> Leader0
2236-
end,
2231+
Leader = case find_leader(Q) of
2232+
undefined ->
2233+
undefined;
2234+
{Name, LeaderNode} ->
2235+
%% double-check the leader is alive if it's supposed to be local
2236+
%% this avoids a remote call, while ensuring we don't claim to be
2237+
%% a leader, if we don't have the leader process running
2238+
case LeaderNode =:= node() of
2239+
true ->
2240+
case erlang:is_pid(Name) of
2241+
true ->
2242+
LeaderNode;
2243+
false ->
2244+
undefined
2245+
end;
2246+
false ->
2247+
LeaderNode
2248+
end
2249+
end,
2250+
Members = get_nodes(Q),
22372251
{Leader, Members}.

0 commit comments

Comments
 (0)