Skip to content

Commit 1eed7c2

Browse files
committed
Have minimum queue TTL take effect for quorum queues
For classic queues, if both policy and queue argument are set for queue TTL, the minimum takes effect. Prior to this commit, for quorum queues if both policy and queue argument are set for queue TTL, the policy always overrides the queue argument. This commit brings the quorum queue queue TTL resolution to classic queue's behaviour. This allows developers to provide a custom lower queue TTL while the operator policy acts an upper bound safe-guard.
1 parent 58b36b8 commit 1eed7c2

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

deps/rabbit/src/rabbit_quorum_queue.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ ra_machine_config(Q) when ?is_amqqueue(Q) ->
309309
MaxMemoryLength = args_policy_lookup(<<"max-in-memory-length">>, fun min/2, Q),
310310
MaxMemoryBytes = args_policy_lookup(<<"max-in-memory-bytes">>, fun min/2, Q),
311311
DeliveryLimit = args_policy_lookup(<<"delivery-limit">>, fun min/2, Q),
312-
Expires = args_policy_lookup(<<"expires">>, fun policyHasPrecedence/2, Q),
312+
Expires = args_policy_lookup(<<"expires">>, fun min/2, Q),
313313
MsgTTL = args_policy_lookup(<<"message-ttl">>, fun min/2, Q),
314314
#{name => Name,
315315
queue_resource => QName,

deps/rabbit/test/quorum_queue_SUITE.erl

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3168,26 +3168,33 @@ delete_if_unused(Config) ->
31683168

31693169
queue_ttl(Config) ->
31703170
Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
3171-
31723171
Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
31733172
QQ = ?config(queue_name, Config),
3174-
?assertEqual({'queue.declare_ok', QQ, 0, 0},
3175-
declare(Ch, QQ, [{<<"x-queue-type">>, longstr, <<"quorum">>},
3176-
{<<"x-expires">>, long, 1000}])),
3177-
%% check queue no longer exists
3173+
3174+
%% Set policy to 10 seconds.
3175+
PolicyName = <<"my-queue-ttl-policy">>,
3176+
ok = rabbit_ct_broker_helpers:set_policy(
3177+
Config, 0, PolicyName, QQ, <<"queues">>,
3178+
[{<<"expires">>, 10000}]),
3179+
%% Set queue arg to 1 second.
3180+
QArgs = [{<<"x-queue-type">>, longstr, <<"quorum">>},
3181+
{<<"x-expires">>, long, 1000}],
3182+
?assertEqual({'queue.declare_ok', QQ, 0, 0},
3183+
declare(Ch, QQ, QArgs)),
3184+
%% The minimum should take effect.
31783185
?awaitMatch(
31793186
{'EXIT', {{shutdown,
31803187
{server_initiated_close,404,
31813188
<<"NOT_FOUND - no queue 'queue_ttl' in vhost '/'">>}},
31823189
_}},
3183-
catch amqp_channel:call(Ch, #'queue.declare'{queue = QQ,
3184-
passive = true,
3185-
durable = true,
3186-
auto_delete = false,
3187-
arguments = [{<<"x-queue-type">>, longstr, <<"quorum">>},
3188-
{<<"x-expires">>, long, 1000}]}),
3189-
30000),
3190-
ok.
3190+
catch amqp_channel:call(Ch, #'queue.declare'{
3191+
queue = QQ,
3192+
passive = true,
3193+
durable = true,
3194+
auto_delete = false,
3195+
arguments = QArgs}),
3196+
5_000),
3197+
ok = rabbit_ct_broker_helpers:clear_policy(Config, 0, PolicyName).
31913198

31923199
consumer_priorities(Config) ->
31933200
Server = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
@@ -3512,8 +3519,9 @@ leader_locator_policy(Config) ->
35123519
Qs = [?config(queue_name, Config),
35133520
?config(alt_queue_name, Config),
35143521
?config(alt_2_queue_name, Config)],
3522+
PolicyName = <<"my-leader-locator">>,
35153523
ok = rabbit_ct_broker_helpers:set_policy(
3516-
Config, 0, <<"my-leader-locator">>, <<"leader_locator_policy_.*">>, <<"queues">>,
3524+
Config, 0, PolicyName, <<"leader_locator_policy_.*">>, <<"queues">>,
35173525
[{<<"queue-leader-locator">>, <<"balanced">>}]),
35183526

35193527
Leaders = [begin
@@ -3527,7 +3535,7 @@ leader_locator_policy(Config) ->
35273535
[?assertMatch(#'queue.delete_ok'{},
35283536
amqp_channel:call(Ch, #'queue.delete'{queue = Q}))
35293537
|| Q <- Qs],
3530-
ok = rabbit_ct_broker_helpers:clear_policy(Config, 0, <<"my-leader-locator">>),
3538+
ok = rabbit_ct_broker_helpers:clear_policy(Config, 0, PolicyName),
35313539

35323540
?assertEqual(3, length(lists:usort(Leaders))),
35333541
ok.

0 commit comments

Comments
 (0)