diff options
author | Michael Klishin <michael@clojurewerkz.org> | 2023-03-20 08:37:26 +0400 |
---|---|---|
committer | Michael Klishin <michael@clojurewerkz.org> | 2023-03-20 08:37:26 +0400 |
commit | 03bfe0a4467b89d2b356e5ce4031785e908876cb (patch) | |
tree | 8a5f91ff10c3dadb54ce9a616f36c7742e62d93b | |
parent | 298dc8f42b00613e3a42fbc38bf1613e946d7599 (diff) | |
download | rabbitmq-server-git-03bfe0a4467b89d2b356e5ce4031785e908876cb.tar.gz |
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.
-rw-r--r-- | deps/rabbit/BUILD.bazel | 2 | ||||
-rw-r--r-- | deps/rabbit/Makefile | 2 | ||||
-rw-r--r-- | deps/rabbit/priv/schema/rabbit.schema | 2 | ||||
-rw-r--r-- | deps/rabbit/src/rabbit_amqqueue_process.erl | 8 | ||||
-rw-r--r-- | deps/rabbit/src/rabbit_variable_queue.erl | 3 | ||||
-rw-r--r-- | release-notes/3.12.0.md | 10 |
6 files changed, 19 insertions, 8 deletions
diff --git a/deps/rabbit/BUILD.bazel b/deps/rabbit/BUILD.bazel index 2ec823b661..648fd9360b 100644 --- a/deps/rabbit/BUILD.bazel +++ b/deps/rabbit/BUILD.bazel @@ -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}, diff --git a/deps/rabbit/Makefile b/deps/rabbit/Makefile index c2700c9090..8c49dfb60a 100644 --- a/deps/rabbit/Makefile +++ b/deps/rabbit/Makefile @@ -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}, diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index a01ebe4485..3968a4153a 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -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() diff --git a/deps/rabbit/src/rabbit_amqqueue_process.erl b/deps/rabbit/src/rabbit_amqqueue_process.erl index 2bb5c4824e..e113f7d27a 100644 --- a/deps/rabbit/src/rabbit_amqqueue_process.erl +++ b/deps/rabbit/src/rabbit_amqqueue_process.erl @@ -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), diff --git a/deps/rabbit/src/rabbit_variable_queue.erl b/deps/rabbit/src/rabbit_variable_queue.erl index 9cf3af8716..756db060ce 100644 --- a/deps/rabbit/src/rabbit_variable_queue.erl +++ b/deps/rabbit/src/rabbit_variable_queue.erl @@ -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. diff --git a/release-notes/3.12.0.md b/release-notes/3.12.0.md index 69eb6f2b08..418610d021 100644 --- a/release-notes/3.12.0.md +++ b/release-notes/3.12.0.md @@ -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. |