diff options
| -rw-r--r-- | src/rabbit_quorum_queue.erl | 10 | ||||
| -rw-r--r-- | test/quorum_queue_SUITE.erl | 32 |
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) -> |
