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:
parent
c6e2405366
commit
13e8564238
|
@ -203,7 +203,7 @@ lookup_leader(VirtualHost, Stream) ->
|
||||||
{ok, LeaderPid};
|
{ok, LeaderPid};
|
||||||
false ->
|
false ->
|
||||||
case leader_from_members(Q) of
|
case leader_from_members(Q) of
|
||||||
{ok, Pid} ->
|
{ok, Pid} when is_pid(Pid) ->
|
||||||
{ok, Pid};
|
{ok, Pid};
|
||||||
_ ->
|
_ ->
|
||||||
{error, not_available}
|
{error, not_available}
|
||||||
|
@ -856,7 +856,7 @@ leader_from_members(Q) ->
|
||||||
{error, not_found}
|
{error, not_found}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
process_alive(Pid) ->
|
process_alive(Pid) when is_pid(Pid) ->
|
||||||
CurrentNode = node(),
|
CurrentNode = node(),
|
||||||
case node(Pid) of
|
case node(Pid) of
|
||||||
nonode@nohost ->
|
nonode@nohost ->
|
||||||
|
@ -870,7 +870,9 @@ process_alive(Pid) ->
|
||||||
_ ->
|
_ ->
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
end.
|
end;
|
||||||
|
process_alive(_) ->
|
||||||
|
false.
|
||||||
|
|
||||||
is_stream_queue(Q) ->
|
is_stream_queue(Q) ->
|
||||||
case amqqueue:get_type(Q) of
|
case amqqueue:get_type(Q) of
|
||||||
|
|
Loading…
Reference in New Issue