Skip to content

Commit 03bfe0a

Browse files
Make CQv2 the new default
CQv2 is significantly more efficient (x2-4 on some workloads), has lower and more predictable memory footprint, and eliminates the need to make classic queues lazy to achieve that predictability. Per several discussions with the team.
1 parent 298dc8f commit 03bfe0a

File tree

6 files changed

+19
-8
lines changed

6 files changed

+19
-8
lines changed

deps/rabbit/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ _APP_ENV = """[
7878
]},
7979
{halt_on_upgrade_failure, true},
8080
{ssl_apps, [asn1, crypto, public_key, ssl]},
81+
%% classic queue storage implementation version
82+
{classic_queue_default_version, 2},
8183
%% see rabbitmq-server#114
8284
{mirroring_flow_control, true},
8385
{mirroring_sync_batch_size, 4096},

deps/rabbit/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ define PROJECT_ENV
6565
]},
6666
{halt_on_upgrade_failure, true},
6767
{ssl_apps, [asn1, crypto, public_key, ssl]},
68+
%% classic queue storage implementation version
69+
{classic_queue_default_version, 2},
6870
%% see rabbitmq-server#114
6971
{mirroring_flow_control, true},
7072
{mirroring_sync_batch_size, 4096},

deps/rabbit/priv/schema/rabbit.schema

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2408,7 +2408,7 @@ end}.
24082408

24092409
{translation, "rabbit.classic_queue_default_version",
24102410
fun(Conf) ->
2411-
case cuttlefish:conf_get("classic_queue.default_version", Conf, 1) of
2411+
case cuttlefish:conf_get("classic_queue.default_version", Conf, 2) of
24122412
1 -> 1;
24132413
2 -> 2;
24142414
_ -> cuttlefish:unset()

deps/rabbit/src/rabbit_amqqueue_process.erl

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -470,12 +470,10 @@ init_queue_mode(Mode, State = #q {backing_queue = BQ,
470470

471471
init_queue_version(Version0, State = #q {backing_queue = BQ,
472472
backing_queue_state = BQS}) ->
473-
%% When the version is undefined we use the default version 1.
474-
%% We want to BQ:set_queue_version in all cases because a v2
475-
%% policy might have been deleted, for example, and we want
476-
%% the queue to go back to v1.
473+
%% When the version is undefined we use the default version 2 starting with
474+
%% RabbitMQ 3.12.0.
477475
Version = case Version0 of
478-
undefined -> rabbit_misc:get_env(rabbit, classic_queue_default_version, 1);
476+
undefined -> rabbit_misc:get_env(rabbit, classic_queue_default_version, 2);
479477
_ -> Version0
480478
end,
481479
BQS1 = BQ:set_queue_version(Version, BQS),

deps/rabbit/src/rabbit_variable_queue.erl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,8 +492,9 @@ process_recovery_terms(Terms) ->
492492

493493
queue_version(Q) ->
494494
Resolve = fun(_, ArgVal) -> ArgVal end,
495+
%% If queue-version is undefined, we assume v2 starting with RabbitMQ 3.12.0.
495496
case rabbit_queue_type_util:args_policy_lookup(<<"queue-version">>, Resolve, Q) of
496-
undefined -> rabbit_misc:get_env(rabbit, classic_queue_default_version, 1);
497+
undefined -> rabbit_misc:get_env(rabbit, classic_queue_default_version, 2);
497498
Vsn when is_integer(Vsn) -> Vsn;
498499
Vsn -> binary_to_integer(Vsn)
499500
end.

release-notes/3.12.0.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,17 @@ in the `3.11.x` release series.
109109

110110
GitHub issue: [#7553](https://github.com/rabbitmq/rabbitmq-server/pull/7553#issuecomment-1463660454)
111111

112-
* Reduced memory footprint, improved memory use predictability and throughput of classic queues.
112+
* Reduced memory footprint, improved memory use predictability and throughput of classic queues (version 2, or CQv2).
113113
This particularly benefits classic queues with longer backlogs.
114114

115+
Classic queue v2 (CQv2) storage implementation **is now the default**. It is possible to switch
116+
the default back to CQv1 using `rabbitmq.conf`:
117+
118+
``` ini
119+
# uses CQv1 by default
120+
classic_queue.default_version = 1
121+
```
122+
115123
GitHub issues: [#4522](https://github.com/rabbitmq/rabbitmq-server/pull/4522), [#7516](https://github.com/rabbitmq/rabbitmq-server/pull/7516)
116124

117125
* Reduced peak memory footprint of quorum queues.

0 commit comments

Comments
 (0)