summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_quorum_queue.erl10
-rw-r--r--test/quorum_queue_SUITE.erl32
2 files changed, 41 insertions, 1 deletions
diff --git a/src/rabbit_quorum_queue.erl b/src/rabbit_quorum_queue.erl
index b8df6a3028..3d0d074e02 100644
--- a/src/rabbit_quorum_queue.erl
+++ b/src/rabbit_quorum_queue.erl
@@ -444,6 +444,16 @@ stop(VHost) ->
rabbit_types:username()) ->
{ok, QLen :: non_neg_integer()}.
+delete(Q, true, _IfEmpty, _ActingUser) when ?amqqueue_is_quorum(Q) ->
+ rabbit_misc:protocol_error(
+ not_implemented,
+ "cannot delete ~s. queue.delete operations with if-unused flag set are not supported by quorum queues",
+ [rabbit_misc:rs(amqqueue:get_name(Q))]);
+delete(Q, _IfUnused, true, _ActingUser) when ?amqqueue_is_quorum(Q) ->
+ rabbit_misc:protocol_error(
+ not_implemented,
+ "cannot delete ~s. queue.delete operations with if-empty flag set are not supported by quorum queues",
+ [rabbit_misc:rs(amqqueue:get_name(Q))]);
delete(Q,
_IfUnused, _IfEmpty, ActingUser) when ?amqqueue_is_quorum(Q) ->
{Name, _} = amqqueue:get_pid(Q),
diff --git a/test/quorum_queue_SUITE.erl b/test/quorum_queue_SUITE.erl
index 225fbd2f54..1c96517c85 100644
--- a/test/quorum_queue_SUITE.erl
+++ b/test/quorum_queue_SUITE.erl
@@ -133,7 +133,9 @@ all_tests() ->
queue_length_in_memory_purge,
in_memory,
consumer_metrics,
- invalid_policy
+ invalid_policy,
+ delete_if_empty,
+ delete_if_unused
].
memory_tests() ->
@@ -2327,6 +2329,34 @@ consumer_metrics(Config) ->
Key == consumers
end, PropList)).
+delete_if_empty(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ QQ = ?config(queue_name, Config),
+ ?assertEqual({'queue.declare_ok', QQ, 0, 0},
+ declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
+ publish(Ch, QQ),
+ wait_for_messages(Config, [[QQ, <<"1">>, <<"1">>, <<"0">>]]),
+ %% Try to delete the quorum queue
+ ?assertExit({{shutdown, {connection_closing, {server_initiated_close, 540, _}}}, _},
+ amqp_channel:call(Ch, #'queue.delete'{queue = QQ,
+ if_empty = true})).
+
+delete_if_unused(Config) ->
+ Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
+
+ Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
+ QQ = ?config(queue_name, Config),
+ ?assertEqual({'queue.declare_ok', QQ, 0, 0},
+ declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>}])),
+ publish(Ch, QQ),
+ wait_for_messages(Config, [[QQ, <<"1">>, <<"1">>, <<"0">>]]),
+ %% Try to delete the quorum queue
+ ?assertExit({{shutdown, {connection_closing, {server_initiated_close, 540, _}}}, _},
+ amqp_channel:call(Ch, #'queue.delete'{queue = QQ,
+ if_unused = true})).
+
%%----------------------------------------------------------------------------
declare(Ch, Q) ->