Skip to content

Commit 13e8564

Browse files
committed
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
1 parent c6e2405 commit 13e8564

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

deps/rabbitmq_stream/src/rabbit_stream_manager.erl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ lookup_leader(VirtualHost, Stream) ->
203203
{ok, LeaderPid};
204204
false ->
205205
case leader_from_members(Q) of
206-
{ok, Pid} ->
206+
{ok, Pid} when is_pid(Pid) ->
207207
{ok, Pid};
208208
_ ->
209209
{error, not_available}
@@ -856,7 +856,7 @@ leader_from_members(Q) ->
856856
{error, not_found}
857857
end.
858858

859-
process_alive(Pid) ->
859+
process_alive(Pid) when is_pid(Pid) ->
860860
CurrentNode = node(),
861861
case node(Pid) of
862862
nonode@nohost ->
@@ -870,7 +870,9 @@ process_alive(Pid) ->
870870
_ ->
871871
false
872872
end
873-
end.
873+
end;
874+
process_alive(_) ->
875+
false.
874876

875877
is_stream_queue(Q) ->
876878
case amqqueue:get_type(Q) of

0 commit comments

Comments
 (0)