summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_quorum_queue.erl32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/rabbit_quorum_queue.erl b/src/rabbit_quorum_queue.erl
index abb2efcb5d..deeff4194a 100644
--- a/src/rabbit_quorum_queue.erl
+++ b/src/rabbit_quorum_queue.erl
@@ -80,6 +80,7 @@
]).
-define(TICK_TIME, 1000). %% the ra server tick time
+-define(DELETE_TIMEOUT, 5000). %% the ra server tick time
%%----------------------------------------------------------------------------
@@ -294,7 +295,7 @@ delete(#amqqueue{type = quorum, pid = {Name, _},
name = QName, quorum_nodes = QNodes},
_IfUnused, _IfEmpty, ActingUser) ->
%% TODO Quorum queue needs to support consumer tracking for IfUnused
- Timeout = application:get_env(kernel, net_ticktime, 60000) + 5000,
+ Timeout = ?DELETE_TIMEOUT,
Msgs = quorum_messages(Name),
Servers = [{Name, Node} || Node <- QNodes],
case ra:delete_cluster(Servers, Timeout) of
@@ -303,6 +304,8 @@ delete(#amqqueue{type = quorum, pid = {Name, _},
receive
{'DOWN', MRef, process, _, _} ->
ok
+ after Timeout ->
+ ok = force_delete_queue(Servers)
end,
ok = delete_queue_data(QName, ActingUser),
rpc:call(LeaderNode, rabbit_core_metrics, queue_deleted, [QName],
@@ -324,22 +327,27 @@ delete(#amqqueue{type = quorum, pid = {Name, _},
" online to reach a quorum: ~255p."
" Attempting force delete.",
[rabbit_misc:rs(QName), Errs]),
- [begin
- case catch(ra:delete_server(S)) of
- ok -> ok;
- Err ->
- rabbit_log:warning(
- "Force delete of ~w failed with: ~w"
- "This may require manual data clean up~n",
- [S, Err]),
- ok
- end
- end || S <- Servers],
+ ok = force_delete_queue(Servers),
delete_queue_data(QName, ActingUser),
{ok, Msgs}
end
end.
+
+force_delete_queue(Servers) ->
+ [begin
+ case catch(ra:delete_server(S)) of
+ ok -> ok;
+ Err ->
+ rabbit_log:warning(
+ "Force delete of ~w failed with: ~w"
+ "This may require manual data clean up~n",
+ [S, Err]),
+ ok
+ end
+ end || S <- Servers],
+ ok.
+
delete_queue_data(QName, ActingUser) ->
_ = rabbit_amqqueue:internal_delete(QName, ActingUser),
ok.