Skip to content

Commit c9ad0cd

Browse files
the-mikedavismergify[bot]
authored andcommitted
Handle rabbit_amqqueue:internal_delete/2 failures in quorum queues
(cherry picked from commit 4a8d01e)
1 parent aa778aa commit c9ad0cd

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

deps/rabbit/src/rabbit_quorum_queue.erl

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -809,19 +809,24 @@ delete(Q, _IfUnused, _IfEmpty, ActingUser) when ?amqqueue_is_quorum(Q) ->
809809
ok = force_delete_queue(Servers)
810810
end,
811811
notify_decorators(QName, shutdown),
812-
ok = delete_queue_data(Q, ActingUser),
813-
_ = erpc:call(LeaderNode, rabbit_core_metrics, queue_deleted, [QName],
814-
?RPC_TIMEOUT),
815-
{ok, ReadyMsgs};
812+
case delete_queue_data(Q, ActingUser) of
813+
ok ->
814+
_ = erpc:call(LeaderNode, rabbit_core_metrics, queue_deleted, [QName],
815+
?RPC_TIMEOUT),
816+
{ok, ReadyMsgs};
817+
{error, timeout} ->
818+
{protocol_error, internal_error,
819+
"The operation to delete queue ~ts from the metadata "
820+
"store timed out", [rabbit_misc:rs(QName)]}
821+
end;
816822
{error, {no_more_servers_to_try, Errs}} ->
817823
case lists:all(fun({{error, noproc}, _}) -> true;
818824
(_) -> false
819825
end, Errs) of
820826
true ->
821827
%% If all ra nodes were already down, the delete
822828
%% has succeed
823-
delete_queue_data(Q, ActingUser),
824-
{ok, ReadyMsgs};
829+
ok;
825830
false ->
826831
%% attempt forced deletion of all servers
827832
rabbit_log:warning(
@@ -830,9 +835,15 @@ delete(Q, _IfUnused, _IfEmpty, ActingUser) when ?amqqueue_is_quorum(Q) ->
830835
" Attempting force delete.",
831836
[rabbit_misc:rs(QName), Errs]),
832837
ok = force_delete_queue(Servers),
833-
notify_decorators(QName, shutdown),
834-
delete_queue_data(Q, ActingUser),
835-
{ok, ReadyMsgs}
838+
notify_decorators(QName, shutdown)
839+
end,
840+
case delete_queue_data(Q, ActingUser) of
841+
ok ->
842+
{ok, ReadyMsgs};
843+
{error, timeout} ->
844+
{protocol_error, internal_error,
845+
"The operation to delete queue ~ts from the metadata "
846+
"store timed out", [rabbit_misc:rs(QName)]}
836847
end
837848
end.
838849

@@ -850,9 +861,13 @@ force_delete_queue(Servers) ->
850861
end || S <- Servers],
851862
ok.
852863

864+
-spec delete_queue_data(Queue, ActingUser) -> Ret when
865+
Queue :: amqqueue:amqqueue(),
866+
ActingUser :: rabbit_types:username(),
867+
Ret :: ok | {error, timeout}.
868+
853869
delete_queue_data(Queue, ActingUser) ->
854-
_ = rabbit_amqqueue:internal_delete(Queue, ActingUser),
855-
ok.
870+
rabbit_amqqueue:internal_delete(Queue, ActingUser).
856871

857872

858873
delete_immediately(Queue) ->

0 commit comments

Comments
 (0)