Skip to content

Classic queues: make CQv2 the new default #7672

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions deps/rabbit/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ _APP_ENV = """[
]},
{halt_on_upgrade_failure, true},
{ssl_apps, [asn1, crypto, public_key, ssl]},
%% classic queue storage implementation version
{classic_queue_default_version, 2},
%% see rabbitmq-server#114
{mirroring_flow_control, true},
{mirroring_sync_batch_size, 4096},
Expand Down
2 changes: 2 additions & 0 deletions deps/rabbit/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ define PROJECT_ENV
]},
{halt_on_upgrade_failure, true},
{ssl_apps, [asn1, crypto, public_key, ssl]},
%% classic queue storage implementation version
{classic_queue_default_version, 2},
%% see rabbitmq-server#114
{mirroring_flow_control, true},
{mirroring_sync_batch_size, 4096},
Expand Down
2 changes: 1 addition & 1 deletion deps/rabbit/priv/schema/rabbit.schema
Original file line number Diff line number Diff line change
Expand Up @@ -2408,7 +2408,7 @@ end}.

{translation, "rabbit.classic_queue_default_version",
fun(Conf) ->
case cuttlefish:conf_get("classic_queue.default_version", Conf, 1) of
case cuttlefish:conf_get("classic_queue.default_version", Conf, 2) of
1 -> 1;
2 -> 2;
_ -> cuttlefish:unset()
Expand Down
8 changes: 3 additions & 5 deletions deps/rabbit/src/rabbit_amqqueue_process.erl
Original file line number Diff line number Diff line change
Expand Up @@ -470,12 +470,10 @@ init_queue_mode(Mode, State = #q {backing_queue = BQ,

init_queue_version(Version0, State = #q {backing_queue = BQ,
backing_queue_state = BQS}) ->
%% When the version is undefined we use the default version 1.
%% We want to BQ:set_queue_version in all cases because a v2
%% policy might have been deleted, for example, and we want
%% the queue to go back to v1.
%% When the version is undefined we use the default version 2 starting with
%% RabbitMQ 3.12.0.
Version = case Version0 of
undefined -> rabbit_misc:get_env(rabbit, classic_queue_default_version, 1);
undefined -> rabbit_misc:get_env(rabbit, classic_queue_default_version, 2);
_ -> Version0
end,
BQS1 = BQ:set_queue_version(Version, BQS),
Expand Down
3 changes: 2 additions & 1 deletion deps/rabbit/src/rabbit_variable_queue.erl
Original file line number Diff line number Diff line change
Expand Up @@ -492,8 +492,9 @@ process_recovery_terms(Terms) ->

queue_version(Q) ->
Resolve = fun(_, ArgVal) -> ArgVal end,
%% If queue-version is undefined, we assume v2 starting with RabbitMQ 3.12.0.
case rabbit_queue_type_util:args_policy_lookup(<<"queue-version">>, Resolve, Q) of
undefined -> rabbit_misc:get_env(rabbit, classic_queue_default_version, 1);
undefined -> rabbit_misc:get_env(rabbit, classic_queue_default_version, 2);
Vsn when is_integer(Vsn) -> Vsn;
Vsn -> binary_to_integer(Vsn)
end.
Expand Down
10 changes: 9 additions & 1 deletion release-notes/3.12.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,17 @@ in the `3.11.x` release series.

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

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

Classic queue v2 (CQv2) storage implementation **is now the default**. It is possible to switch
the default back to CQv1 using `rabbitmq.conf`:

``` ini
# uses CQv1 by default
classic_queue.default_version = 1
```

GitHub issues: [#4522](https://github.com/rabbitmq/rabbitmq-server/pull/4522), [#7516](https://github.com/rabbitmq/rabbitmq-server/pull/7516)

* Reduced peak memory footprint of quorum queues.
Expand Down