Handle Khepri timeouts when attempting to delete crashed classic Qs

This commit is contained in:
Michael Davis 2024-09-11 13:10:10 -04:00
parent c37b192beb
commit 4f0da67420
No known key found for this signature in database
2 changed files with 14 additions and 4 deletions

View File

@ -1691,7 +1691,10 @@ delete_crashed(Q) when ?amqqueue_is_classic(Q) ->
delete_crashed(Q, ActingUser) when ?amqqueue_is_classic(Q) ->
rabbit_classic_queue:delete_crashed(Q, ActingUser).
-spec delete_crashed_internal(amqqueue:amqqueue(), rabbit_types:username()) -> 'ok'.
-spec delete_crashed_internal(Q, ActingUser) -> Ret when
Q :: amqqueue:amqqueue(),
ActingUser :: rabbit_types:username(),
Ret :: ok | {error, timeout}.
delete_crashed_internal(Q, ActingUser) when ?amqqueue_is_classic(Q) ->
rabbit_classic_queue:delete_crashed_internal(Q, ActingUser).

View File

@ -168,8 +168,15 @@ delete(Q0, IfUnused, IfEmpty, ActingUser) when ?amqqueue_is_classic(Q0) ->
rabbit_log:warning("Queue ~ts in vhost ~ts is down. "
"Forcing queue deletion.",
[Name, Vhost]),
delete_crashed_internal(Q, ActingUser),
{ok, 0}
case delete_crashed_internal(Q, ActingUser) of
ok ->
{ok, 0};
{error, timeout} ->
{error, protocol_error,
"The operation to delete ~ts from the "
"metadata store timed out",
[rabbit_misc:rs(QName)]}
end
end
end;
{error, not_found} ->
@ -551,7 +558,7 @@ delete_crashed(Q, ActingUser) ->
delete_crashed_internal(Q, ActingUser) ->
delete_crashed_in_backing_queue(Q),
ok = rabbit_amqqueue:internal_delete(Q, ActingUser).
rabbit_amqqueue:internal_delete(Q, ActingUser).
delete_crashed_in_backing_queue(Q) ->
{ok, BQ} = application:get_env(rabbit, backing_queue_module),