Return error if stream leader is undefined in stream manager

A stream may not have a leader temporarily for several reasons, e.g.
after it has been restarted. The stream manager may return undefined in
this case. Some client code may crash because it expects a PID or an
error, but not undefined.

This commit makes sure the leader PID is an actual Erlang PID and
returns {error, not_available} if it is not.

References #13962
This commit is contained in:
Arnaud Cogoluègnes 2025-06-16 16:38:29 +02:00
parent c6e2405366
commit 13e8564238
No known key found for this signature in database
GPG Key ID: D5C8C4DFAD43AFA8
1 changed files with 5 additions and 3 deletions

View File

@ -203,7 +203,7 @@ lookup_leader(VirtualHost, Stream) ->
{ok, LeaderPid};
false ->
case leader_from_members(Q) of
{ok, Pid} ->
{ok, Pid} when is_pid(Pid) ->
{ok, Pid};
_ ->
{error, not_available}
@ -856,7 +856,7 @@ leader_from_members(Q) ->
{error, not_found}
end.
process_alive(Pid) ->
process_alive(Pid) when is_pid(Pid) ->
CurrentNode = node(),
case node(Pid) of
nonode@nohost ->
@ -870,7 +870,9 @@ process_alive(Pid) ->
_ ->
false
end
end.
end;
process_alive(_) ->
false.
is_stream_queue(Q) ->
case amqqueue:get_type(Q) of