Skip to content

Commit 9d9f624

Browse files
committed
Call E() instead of crashing with badmatch, retry when queue is mirrored
1 parent b43de46 commit 9d9f624

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/rabbit_amqqueue.erl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ retry_wait(Q = #amqqueue{pid = QPid, name = Name, state = QState}, F, E, Retries
505505
%% there are no slaves to migrate to
506506
{stopped, false} ->
507507
E({absent, Q, stopped});
508-
_ ->
508+
{_, true} ->
509509
case rabbit_mnesia:is_process_alive(QPid) of
510510
true ->
511511
% rabbitmq-server#1682 - No need to sleep if the
@@ -515,7 +515,17 @@ retry_wait(Q = #amqqueue{pid = QPid, name = Name, state = QState}, F, E, Retries
515515
false ->
516516
timer:sleep(30)
517517
end,
518-
with(Name, F, E, RetriesLeft - 1)
518+
with(Name, F, E, RetriesLeft - 1);
519+
_ ->
520+
case rabbit_mnesia:is_process_alive(QPid) of
521+
true ->
522+
% rabbitmq-server#1682 - absent & alive is weird,
523+
% but better than crashing with badmatch,true
524+
E({absent, Q, alive});
525+
false ->
526+
timer:sleep(30),
527+
with(Name, F, E, RetriesLeft - 1)
528+
end
519529
end.
520530

521531
with(Name, F) -> with(Name, F, fun (E) -> {error, E} end).

0 commit comments

Comments
 (0)