diff options
author | Michael Klishin <klishinm@vmware.com> | 2023-04-17 14:24:12 +0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-17 14:24:12 +0400 |
commit | d34ac54bf19e31a7270be6e687d903e0178e343b (patch) | |
tree | d82ce474891cc8e232b3920a0da1adc07fb3cfea | |
parent | cf6b442e2d1ba1f56d2bc655f5edb309a445261f (diff) | |
parent | e50746938704dca0400528a89f0e05bf08b6d7f5 (diff) | |
download | rabbitmq-server-git-d34ac54bf19e31a7270be6e687d903e0178e343b.tar.gz |
Merge branch 'main' into recovery-terms-ram-file-on-start
62 files changed, 137 insertions, 206 deletions
@@ -59,6 +59,9 @@ build:rbe-25_2 --platforms=//bazel/platforms:erlang_linux_25_2_platform build:rbe-25_3 --config=rbe build:rbe-25_3 --platforms=//bazel/platforms:erlang_linux_25_3_platform +build:rbe-26 --config=rbe +build:rbe-26 --platforms=//bazel/platforms:erlang_linux_26_platform + # no-op config so that --config=local does not error build:local --color=auto diff --git a/BUILD.bazel b/BUILD.bazel index a622cad68e..ffab183c11 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -4,7 +4,7 @@ load( "string_flag", ) load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") -load("@rules_erlang//:dialyze.bzl", "plt") +load("@rules_erlang//:dialyze.bzl", "DEFAULT_PLT_APPS", "plt") load("@rules_erlang//:shell.bzl", "shell") load("@rules_erlang//:erl_eval.bzl", "erl_eval") load("@bazel_gazelle//:def.bzl", "gazelle") @@ -63,6 +63,7 @@ string_flag( plt( name = "base_plt", + apps = DEFAULT_PLT_APPS + ["compiler", "crypto"], visibility = ["//visibility:public"], ) diff --git a/MODULE.bazel b/MODULE.bazel index 8e98d7a038..ac501018db 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -31,7 +31,7 @@ bazel_dep( bazel_dep( name = "rules_erlang", - version = "3.9.11", + version = "3.9.12", ) erlang_config = use_extension( @@ -69,6 +69,12 @@ erlang_config.internal_erlang_from_github_release( version = "25.3", ) +erlang_config.internal_erlang_from_github_release( + name = "26", + sha256 = "ce962175c4d90161a7247d8e2e4ae36f9d8cc0214c8f52dba8ba84a82afc096f", + version = "26.0-rc3", +) + erlang_config.internal_erlang_from_http_archive( name = "git_master", strip_prefix = "otp-master", @@ -114,6 +120,8 @@ register_toolchains( "@erlang_config//25_2:toolchain2", "@erlang_config//25_3:toolchain", "@erlang_config//25_3:toolchain2", + "@erlang_config//26:toolchain", + "@erlang_config//26:toolchain2", "@erlang_config//git_master:toolchain", "@erlang_config//git_master:toolchain2", "@elixir_config//external:toolchain", @@ -6,7 +6,7 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository", "new_git_r git_repository( name = "rules_erlang", remote = "https://github.com/rabbitmq/rules_erlang.git", - tag = "3.9.11", + tag = "3.9.12", ) load("@rules_erlang//:internal_deps.bzl", "rules_erlang_internal_deps") @@ -92,6 +92,13 @@ http_file( urls = ["https://github.com/erlang/otp/archive/OTP-25.3.tar.gz"], ) +http_file( + name = "otp_src_26", + downloaded_file_path = "OTP-26.0-rc3.tar.gz", + sha256 = "f4fc2c5e1da56eb659003015ab80c42e50cef1129cca8c14457a522d1793498d", + urls = ["https://github.com/erlang/otp/archive/OTP-26.0-rc3.tar.gz"], +) + http_archive( name = "io_buildbuddy_buildbuddy_toolchain", sha256 = "a2a5cccec251211e2221b1587af2ce43c36d32a42f5d881737db3b546a536510", @@ -133,6 +140,11 @@ erlang_config( sha256 = "85c447efc1746740df4089d75bc0e47b88d5161d7c44e9fc4c20fa33ea5d19d7", version = "25.3", ), + internal_erlang_from_github_release( + name = "26", + sha256 = "ce962175c4d90161a7247d8e2e4ae36f9d8cc0214c8f52dba8ba84a82afc096f", + version = "26.0-rc3", + ), internal_erlang_from_http_archive( name = "git_master", strip_prefix = "otp-master", diff --git a/bazel/platforms/BUILD.bazel b/bazel/platforms/BUILD.bazel index 9ec10da0f9..68676f9e4e 100644 --- a/bazel/platforms/BUILD.bazel +++ b/bazel/platforms/BUILD.bazel @@ -57,6 +57,15 @@ platform( ) platform( + name = "erlang_linux_26_platform", + constraint_values = [ + "@erlang_config//:erlang_26", + "@elixir_config//:elixir_1_14", + ], + parents = ["@rbe//config:platform"], +) + +platform( name = "erlang_linux_git_master_platform", constraint_values = [ "@erlang_config//:erlang_26", diff --git a/deps/amqp10_client/BUILD.bazel b/deps/amqp10_client/BUILD.bazel index ab139b6ff0..c2447899ba 100644 --- a/deps/amqp10_client/BUILD.bazel +++ b/deps/amqp10_client/BUILD.bazel @@ -68,6 +68,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/amqp_client/BUILD.bazel b/deps/amqp_client/BUILD.bazel index bfa5269954..cb63cf8a5a 100644 --- a/deps/amqp_client/BUILD.bazel +++ b/deps/amqp_client/BUILD.bazel @@ -67,6 +67,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbit/BUILD.bazel b/deps/rabbit/BUILD.bazel index d14ec2da38..90610d3405 100644 --- a/deps/rabbit/BUILD.bazel +++ b/deps/rabbit/BUILD.bazel @@ -211,6 +211,7 @@ plt( apps = plt_apps, plt = "//:base_plt", deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbit/apps/rabbitmq_prelaunch/BUILD.bazel b/deps/rabbit/apps/rabbitmq_prelaunch/BUILD.bazel index b7df0a338f..3109c5f3da 100644 --- a/deps/rabbit/apps/rabbitmq_prelaunch/BUILD.bazel +++ b/deps/rabbit/apps/rabbitmq_prelaunch/BUILD.bazel @@ -50,6 +50,7 @@ plt( "@systemd//:erlang_app", "@osiris//:erlang_app", ], + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbit/src/rabbit_process.erl b/deps/rabbit/src/rabbit_process.erl index 056f9dd3ec..0fe093ff7f 100644 --- a/deps/rabbit/src/rabbit_process.erl +++ b/deps/rabbit/src/rabbit_process.erl @@ -87,4 +87,7 @@ is_registered_process_alive(Name) -> %% false otherwise. is_process_hibernated(Pid) when is_pid(Pid) -> - {current_function,{erlang,hibernate,3}} == erlang:process_info(Pid, current_function). + {current_function,{erlang,hibernate,3}} == erlang:process_info(Pid, current_function); +is_process_hibernated(_) -> + %% some queue types, eg QQs, have a tuple as a Pid, but they are never hibernated + false. diff --git a/deps/rabbit_common/BUILD.bazel b/deps/rabbit_common/BUILD.bazel index fd25782b1a..836ef81b98 100644 --- a/deps/rabbit_common/BUILD.bazel +++ b/deps/rabbit_common/BUILD.bazel @@ -117,6 +117,7 @@ plt( apps = EXTRA_APPS + ["mnesia"], plt = "//:base_plt", deps = RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_amqp1_0/BUILD.bazel b/deps/rabbitmq_amqp1_0/BUILD.bazel index acab0966f5..6b96323981 100644 --- a/deps/rabbitmq_amqp1_0/BUILD.bazel +++ b/deps/rabbitmq_amqp1_0/BUILD.bazel @@ -58,6 +58,7 @@ plt( libs = ["//deps/rabbitmq_cli:elixir"], plt = "//:base_plt", deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_auth_backend_cache/BUILD.bazel b/deps/rabbitmq_auth_backend_cache/BUILD.bazel index 809a767d1b..2aef3a9ee8 100644 --- a/deps/rabbitmq_auth_backend_cache/BUILD.bazel +++ b/deps/rabbitmq_auth_backend_cache/BUILD.bazel @@ -49,6 +49,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_auth_backend_http/BUILD.bazel b/deps/rabbitmq_auth_backend_http/BUILD.bazel index 27a78c2301..fb3b8e2f57 100644 --- a/deps/rabbitmq_auth_backend_http/BUILD.bazel +++ b/deps/rabbitmq_auth_backend_http/BUILD.bazel @@ -56,6 +56,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_auth_backend_ldap/BUILD.bazel b/deps/rabbitmq_auth_backend_ldap/BUILD.bazel index 33491f8726..d73887c039 100644 --- a/deps/rabbitmq_auth_backend_ldap/BUILD.bazel +++ b/deps/rabbitmq_auth_backend_ldap/BUILD.bazel @@ -72,6 +72,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_auth_backend_oauth2/BUILD.bazel b/deps/rabbitmq_auth_backend_oauth2/BUILD.bazel index f8d2d0aa18..357c873314 100644 --- a/deps/rabbitmq_auth_backend_oauth2/BUILD.bazel +++ b/deps/rabbitmq_auth_backend_oauth2/BUILD.bazel @@ -57,6 +57,7 @@ plt( libs = ["//deps/rabbitmq_cli:elixir"], plt = "//:base_plt", deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_auth_backend_oauth2/priv/schema/rabbitmq_auth_backend_oauth2.schema b/deps/rabbitmq_auth_backend_oauth2/priv/schema/rabbitmq_auth_backend_oauth2.schema index db8abe8928..6f8c048516 100644 --- a/deps/rabbitmq_auth_backend_oauth2/priv/schema/rabbitmq_auth_backend_oauth2.schema +++ b/deps/rabbitmq_auth_backend_oauth2/priv/schema/rabbitmq_auth_backend_oauth2.schema @@ -5,7 +5,7 @@ %% %% ---------------------------------------------------------------------------- -%% A prefix used for scopes in UAA to avoid scope collisions (or unintended overlap). It is an empty string by default. +%% A prefix used for scopes to avoid scope collisions (or unintended overlap). It is an empty string by default. %% %% {resource_server_id, <<"my_rabbit_server">>}, diff --git a/deps/rabbitmq_auth_mechanism_ssl/BUILD.bazel b/deps/rabbitmq_auth_mechanism_ssl/BUILD.bazel index f8b39dc754..b926d5242a 100644 --- a/deps/rabbitmq_auth_mechanism_ssl/BUILD.bazel +++ b/deps/rabbitmq_auth_mechanism_ssl/BUILD.bazel @@ -47,6 +47,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_aws/BUILD.bazel b/deps/rabbitmq_aws/BUILD.bazel index af6367837c..7763594c03 100644 --- a/deps/rabbitmq_aws/BUILD.bazel +++ b/deps/rabbitmq_aws/BUILD.bazel @@ -49,6 +49,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = BUILD_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_cli/BUILD.bazel b/deps/rabbitmq_cli/BUILD.bazel index bcb244f441..e166cc2f55 100644 --- a/deps/rabbitmq_cli/BUILD.bazel +++ b/deps/rabbitmq_cli/BUILD.bazel @@ -90,6 +90,7 @@ plt( "//deps/rabbit:erlang_app", "//deps/rabbit_common:erlang_app", ], + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_consistent_hash_exchange/BUILD.bazel b/deps/rabbitmq_consistent_hash_exchange/BUILD.bazel index 24a9ee08d7..ffa505f724 100644 --- a/deps/rabbitmq_consistent_hash_exchange/BUILD.bazel +++ b/deps/rabbitmq_consistent_hash_exchange/BUILD.bazel @@ -46,6 +46,7 @@ plt( libs = ["//deps/rabbitmq_cli:elixir"], plt = "//:base_plt", deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_event_exchange/BUILD.bazel b/deps/rabbitmq_event_exchange/BUILD.bazel index 7b2105889a..41819a4051 100644 --- a/deps/rabbitmq_event_exchange/BUILD.bazel +++ b/deps/rabbitmq_event_exchange/BUILD.bazel @@ -33,6 +33,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_event_exchange/README.md b/deps/rabbitmq_event_exchange/README.md index d9a58f70d0..1380a4d30f 100644 --- a/deps/rabbitmq_event_exchange/README.md +++ b/deps/rabbitmq_event_exchange/README.md @@ -11,8 +11,8 @@ the management plugin for stats. ## How it Works -It declares a topic exchange called 'amq.rabbitmq.event' in the default -virtual host. All events are published to this exchange with routing +It declares a topic exchange called `amq.rabbitmq.event` **in the default +virtual host**. All events are published to this exchange with routing keys like 'exchange.created', 'binding.deleted' etc, so you can subscribe to only the events you're interested in. @@ -23,26 +23,11 @@ gets published, don't allow them access. ## Installation -### With RabbitMQ 3.6.0 or Later - -Most recent RabbitMQ version ships with this plugin. -As of RabbitMQ `3.6.0` this plugin is included into the RabbitMQ distribution. - -Enable it with the following command: - -```bash -rabbitmq-plugins enable rabbitmq_event_exchange -``` - -### With RabbitMQ 3.5.x - -You can download a pre-built binary of this plugin from -the [RabbitMQ Community Plugins](https://www.rabbitmq.com/community-plugins.html) page. - -Then run the following command: +This plugin ships with RabbitMQ. Like with all other plugins, it must be +enabled before it can be used: ```bash -rabbitmq-plugins enable rabbitmq_event_exchange +[sudo] rabbitmq-plugins enable rabbitmq_event_exchange ``` ## Event format diff --git a/deps/rabbitmq_federation/BUILD.bazel b/deps/rabbitmq_federation/BUILD.bazel index 6677d57f34..ccb36cd458 100644 --- a/deps/rabbitmq_federation/BUILD.bazel +++ b/deps/rabbitmq_federation/BUILD.bazel @@ -52,6 +52,7 @@ plt( plt = "//:base_plt", libs = ["//deps/rabbitmq_cli:elixir"], deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_federation_management/BUILD.bazel b/deps/rabbitmq_federation_management/BUILD.bazel index 43743f83c6..3503f26dc9 100644 --- a/deps/rabbitmq_federation_management/BUILD.bazel +++ b/deps/rabbitmq_federation_management/BUILD.bazel @@ -47,6 +47,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_jms_topic_exchange/BUILD.bazel b/deps/rabbitmq_jms_topic_exchange/BUILD.bazel index 20e1d48405..8c474aa398 100644 --- a/deps/rabbitmq_jms_topic_exchange/BUILD.bazel +++ b/deps/rabbitmq_jms_topic_exchange/BUILD.bazel @@ -49,6 +49,7 @@ plt( plt = "//:base_plt", apps = EXTRA_APPS, deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_jms_topic_exchange/README.md b/deps/rabbitmq_jms_topic_exchange/README.md index a1c81823a8..5cb2ff9305 100644 --- a/deps/rabbitmq_jms_topic_exchange/README.md +++ b/deps/rabbitmq_jms_topic_exchange/README.md @@ -17,28 +17,28 @@ Some related projects (e.g. a compliance test suite) and documentation are yet t ## Supported RabbitMQ Versions -This plugin targets RabbitMQ `3.6.0` and later versions. +This plugin ships with RabbitMQ. ## Installation -This plugin ships with RabbitMQ starting with `3.6.3`. Enable it with +Like all other plugins, this plugin must be enabled before it can be used. +Enable it with ``` [sudo] rabbitmq-plugins enable rabbitmq_jms_topic_exchange ``` - ## Design The plugin this generates is a user-written exchange type for RabbitMQ -client use. The exchange type name is "`x_jms_topic`" but this is _not_ +client use. The exchange type name is "`x-jms-topic`" but this is _not_ a topic exchange. Instead it works together with a standard topic exchange to provide the JMS topic selection function. When JMS Selectors are used on a Topic Destination consumer, the -destination (queue) is bound to an exchange of type `x_jms_topic`, with +destination (queue) is bound to an exchange of type `x-jms-topic`, with arguments that indicate what the selection criteria are. The -`x_jms_topic` exchange is, in turn, bound to the standard Topic Exchange +`x-jms-topic` exchange is, in turn, bound to the standard Topic Exchange used by JMS messaging (this uses the RabbitMQ exchange-to-exchange binding extension to the AMQP 0-9-1 protocol). @@ -46,19 +46,9 @@ In this way, normal topic routing can occur, with the overhead of selection only applying when selection is used, and _after_ the routing and filtering implied by the topic name. -## Building From Source - -Building is no different from [building other RabbitMQ plugins](https://www.rabbitmq.com/plugin-development.html). - -TL;DR: - - git clone https://github.com/rabbitmq/rabbitmq-jms-topic-exchange.git - cd rabbitmq-jms-topic-exchange - make -j dist - ls plugins/* ## Copyright and License -(c) 2007-2020 VMware, Inc. or its affiliates. +(c) 2007-2023 VMware, Inc. or its affiliates. See [LICENSE](./LICENSE) for license information. diff --git a/deps/rabbitmq_management/BUILD.bazel b/deps/rabbitmq_management/BUILD.bazel index e2051bd778..a2133adb35 100644 --- a/deps/rabbitmq_management/BUILD.bazel +++ b/deps/rabbitmq_management/BUILD.bazel @@ -80,6 +80,7 @@ plt( plt = "//:base_plt", apps = EXTRA_APPS, deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_management/priv/schema/rabbitmq_management.schema b/deps/rabbitmq_management/priv/schema/rabbitmq_management.schema index e2bcf5c5c7..289bd73443 100644 --- a/deps/rabbitmq_management/priv/schema/rabbitmq_management.schema +++ b/deps/rabbitmq_management/priv/schema/rabbitmq_management.schema @@ -432,20 +432,6 @@ end}. %% =========================================================================== %% Authorization -%% Configure OAuth2 in the management ui to work with old versions of UAA (which versions?) -{mapping, "management.enable_uaa", "rabbitmq_management.enable_uaa", - [{datatype, {enum, [true, false]}}]}. - -%% Your client application's identifier as registered with the OIDC/OAuth2. Deprecated, switch to oauth_client_id -{mapping, "management.uaa_client_id", "rabbitmq_management.uaa_client_id", - [{datatype, string}]}. -{mapping, "management.uaa_client_secret", "rabbitmq_management.uaa_client_secret", - [{datatype, string}]}. - -%% The URL of the OIDC/OAuth2 provider -{mapping, "management.uaa_location", "rabbitmq_management.uaa_location", - [{datatype, string}]}. - %% Enable OAuth2 in the management ui {mapping, "management.oauth_enabled", "rabbitmq_management.oauth_enabled", [{datatype, {enum, [true, false]}}]}. diff --git a/deps/rabbitmq_management/priv/www/js/oidc-oauth/helper.js b/deps/rabbitmq_management/priv/www/js/oidc-oauth/helper.js index b7fb785b60..8bc8f392e7 100644 --- a/deps/rabbitmq_management/priv/www/js/oidc-oauth/helper.js +++ b/deps/rabbitmq_management/priv/www/js/oidc-oauth/helper.js @@ -28,21 +28,7 @@ function rabbit_base_uri() { } function auth_settings_apply_defaults(authSettings) { - if (authSettings.enable_uaa) { - if (!authSettings.oauth_provider_url) { - authSettings.oauth_provider_url = authSettings.uaa_location - } - if (!authSettings.oauth_client_id) { - authSettings.oauth_client_id = authSettings.uaa_client_id - } - if (!authSettings.oauth_client_secret) { - authSettings.oauth_client_secret = authSettings.uaa_client_secret - } - if (!authSettings.oauth_scopes) { - authSettings.oauth_scopes = "openid profile " + authSettings.oauth_resource_id + ".*"; - } - } if (!authSettings.oauth_response_type) { authSettings.oauth_response_type = "code"; // although the default value in oidc client } @@ -78,7 +64,7 @@ function oauth_initialize(authSettings) { authority: authSettings.oauth_provider_url, client_id: authSettings.oauth_client_id, response_type: authSettings.oauth_response_type, - scope: authSettings.oauth_scopes, // for uaa we may need to include <resource-server-id>.* + scope: authSettings.oauth_scopes, resource: authSettings.oauth_resource_id, redirect_uri: rabbit_base_uri() + "/js/oidc-oauth/login-callback.html", post_logout_redirect_uri: rabbit_base_uri() + "/", @@ -96,13 +82,6 @@ function oauth_initialize(authSettings) { oidcSettings.metadataUrl = authSettings.oauth_metadata_url; } - if (authSettings.enable_uaa == true) { - // This is required for old versions of UAA because the newer ones do expose - // the end_session_endpoint on the oidc discovery endpoint, .a.k.a. metadataUrl - oidcSettings.metadataSeed = { - end_session_endpoint: authSettings.oauth_provider_url + "/logout.do" - } - } oidc.Log.setLevel(oidc.Log.DEBUG); oidc.Log.setLogger(console); diff --git a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.conf b/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.conf index 33281429c7..7fa212ac21 100644 --- a/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.conf +++ b/deps/rabbitmq_management/selenium/test/oauth/rabbitmq.conf @@ -1,7 +1,6 @@ auth_backends.1 = rabbit_auth_backend_oauth2 management.login_session_timeout = 1 -management.enable_uaa = true management.oauth_enabled = true management.oauth_client_id = rabbit_client_code management.oauth_scopes = ${OAUTH_SCOPES} diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_oauth_bootstrap.erl b/deps/rabbitmq_management/src/rabbit_mgmt_oauth_bootstrap.erl index deb0a3f433..f79e8279a2 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_oauth_bootstrap.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_oauth_bootstrap.erl @@ -22,70 +22,9 @@ bootstrap_oauth(Req0, State) -> JSContent = oauth_initialize_if_required() ++ set_token_auth(Req0), {ok, cowboy_req:reply(200, #{<<"content-type">> => <<"text/javascript; charset=utf-8">>}, JSContent, Req0), State}. -authSettings() -> - EnableUAA = application:get_env(rabbitmq_management, enable_uaa, false), - EnableOAUTH = application:get_env(rabbitmq_management, oauth_enabled, false), - Data = case EnableOAUTH of - true -> - OAuthInitiatedLogonType = application:get_env(rabbitmq_management, oauth_initiated_logon_type, sp_initiated), - OAuthProviderUrl = application:get_env(rabbitmq_management, oauth_provider_url, ""), - case OAuthInitiatedLogonType of - sp_initiated -> - OAuthClientId = application:get_env(rabbitmq_management, oauth_client_id, ""), - OAuthClientSecret = application:get_env(rabbitmq_management, oauth_client_secret, undefined), - OAuthMetadataUrl = application:get_env(rabbitmq_management, oauth_metadata_url, undefined), - OAuthScopes = application:get_env(rabbitmq_management, oauth_scopes, undefined), - OAuthResourceId = application:get_env(rabbitmq_auth_backend_oauth2, resource_server_id, ""), - case is_invalid([OAuthResourceId]) of - true -> - json_field(oauth_enabled, false, true); - false -> - case is_invalid([OAuthClientId, OAuthProviderUrl]) of - true -> - json_field(oauth_enabled, false, true); - false -> - json_field(oauth_enabled, true) ++ - json_field(enable_uaa, EnableUAA) ++ - json_field(oauth_client_id, OAuthClientId) ++ - json_field(oauth_client_secret, OAuthClientSecret) ++ - json_field(oauth_provider_url, OAuthProviderUrl) ++ - json_field(oauth_scopes, OAuthScopes) ++ - json_field(oauth_metadata_url, OAuthMetadataUrl) ++ - json_field(oauth_resource_id, OAuthResourceId, true) - end - end; - idp_initiated -> - [ json_field(oauth_enabled, true) ++ - json_field(oauth_initiated_logon_type, idp_initiated) ++ - json_field(oauth_provider_url, OAuthProviderUrl, true) - ] - end; - false -> - [ json_field(oauth_enabled, false, true) ] - end, - "{" ++ Data ++ "}". - -is_invalid(List) -> - lists:any(fun(V) -> V == "" end, List). - -json_field(Field, Value) -> json_field(Field, Value, false). - -json_field(_Field, Value, _LastField) when Value == undefined -> [ ]; -json_field(Field, Value, LastField) when is_number(Value) -> - ["\"", atom_to_list(Field), "\": ", Value, append_comma_if(not LastField)]; -json_field(Field, Value, LastField) when is_boolean(Value) -> - ["\"", atom_to_list(Field), "\": ", atom_to_list(Value), append_comma_if(not LastField)]; -json_field(Field, Value, LastField) when is_atom(Value) -> - ["\"", atom_to_list(Field), "\": \"", atom_to_list(Value), "\"", append_comma_if(not LastField)]; -json_field(Field, Value, LastField) -> - ["\"", atom_to_list(Field), "\": \"", Value, "\"", append_comma_if(not LastField)]. - - -append_comma_if(Append) when Append == true -> ","; -append_comma_if(Append) when Append == false -> "". - oauth_initialize_if_required() -> - "function oauth_initialize_if_required() { return oauth_initialize(" ++ authSettings() ++ ") }". + ["function oauth_initialize_if_required() { return oauth_initialize(" , + rabbit_json:encode(rabbit_mgmt_format:format_nulls(rabbit_mgmt_wm_auth:authSettings())) , ") }" ]. set_token_auth(Req0) -> case application:get_env(rabbitmq_management, oauth_enabled, false) of diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl index fe7b33e548..8f278e077c 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_wm_auth.erl @@ -25,7 +25,6 @@ content_types_provided(ReqData, Context) -> {rabbit_mgmt_util:responder_map(to_json), ReqData, Context}. authSettings() -> - EnableUAA = application:get_env(rabbitmq_management, enable_uaa, false), EnableOAUTH = application:get_env(rabbitmq_management, oauth_enabled, false), case EnableOAUTH of true -> @@ -48,7 +47,6 @@ authSettings() -> false -> append_oauth_optional_secret([ {oauth_enabled, true}, - {enable_uaa, rabbit_data_coercion:to_binary(EnableUAA)}, {oauth_client_id, rabbit_data_coercion:to_binary(OAuthClientId)}, {oauth_provider_url, rabbit_data_coercion:to_binary(OAuthProviderUrl)}, {oauth_scopes, rabbit_data_coercion:to_binary(OAuthScopes)}, diff --git a/deps/rabbitmq_management_agent/BUILD.bazel b/deps/rabbitmq_management_agent/BUILD.bazel index d04d5d093a..264ba38498 100644 --- a/deps/rabbitmq_management_agent/BUILD.bazel +++ b/deps/rabbitmq_management_agent/BUILD.bazel @@ -69,6 +69,7 @@ plt( libs = ["//deps/rabbitmq_cli:elixir"], plt = "//:base_plt", deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_mqtt/BUILD.bazel b/deps/rabbitmq_mqtt/BUILD.bazel index 80e5898735..9a56036d90 100644 --- a/deps/rabbitmq_mqtt/BUILD.bazel +++ b/deps/rabbitmq_mqtt/BUILD.bazel @@ -80,6 +80,7 @@ plt( apps = EXTRA_APPS, libs = ["//deps/rabbitmq_cli:elixir"], deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_peer_discovery_aws/BUILD.bazel b/deps/rabbitmq_peer_discovery_aws/BUILD.bazel index 5fd579264c..96023b5b25 100644 --- a/deps/rabbitmq_peer_discovery_aws/BUILD.bazel +++ b/deps/rabbitmq_peer_discovery_aws/BUILD.bazel @@ -43,6 +43,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_peer_discovery_common/BUILD.bazel b/deps/rabbitmq_peer_discovery_common/BUILD.bazel index 77b8ee2aa1..81fed8df89 100644 --- a/deps/rabbitmq_peer_discovery_common/BUILD.bazel +++ b/deps/rabbitmq_peer_discovery_common/BUILD.bazel @@ -45,6 +45,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_peer_discovery_consul/BUILD.bazel b/deps/rabbitmq_peer_discovery_consul/BUILD.bazel index c88ce1177d..ca5855e908 100644 --- a/deps/rabbitmq_peer_discovery_consul/BUILD.bazel +++ b/deps/rabbitmq_peer_discovery_consul/BUILD.bazel @@ -39,6 +39,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_peer_discovery_etcd/BUILD.bazel b/deps/rabbitmq_peer_discovery_etcd/BUILD.bazel index fd76c5fcec..66c625df01 100644 --- a/deps/rabbitmq_peer_discovery_etcd/BUILD.bazel +++ b/deps/rabbitmq_peer_discovery_etcd/BUILD.bazel @@ -46,6 +46,7 @@ plt( "@eetcd//:erlang_app", RUNTIME_DEPS, ), + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_peer_discovery_k8s/BUILD.bazel b/deps/rabbitmq_peer_discovery_k8s/BUILD.bazel index 989e4c07d7..b6f0899fef 100644 --- a/deps/rabbitmq_peer_discovery_k8s/BUILD.bazel +++ b/deps/rabbitmq_peer_discovery_k8s/BUILD.bazel @@ -39,6 +39,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_prometheus/BUILD.bazel b/deps/rabbitmq_prometheus/BUILD.bazel index 067aaa97c4..9a2620028a 100644 --- a/deps/rabbitmq_prometheus/BUILD.bazel +++ b/deps/rabbitmq_prometheus/BUILD.bazel @@ -48,6 +48,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = BUILD_DEPS + DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_random_exchange/BUILD.bazel b/deps/rabbitmq_random_exchange/BUILD.bazel index 1ab6e60d6c..7cc9e92fbc 100644 --- a/deps/rabbitmq_random_exchange/BUILD.bazel +++ b/deps/rabbitmq_random_exchange/BUILD.bazel @@ -37,6 +37,7 @@ plt( name = "base_plt", deps = BUILD_DEPS + DEPS, plt = "//:base_plt", + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_random_exchange/README.md b/deps/rabbitmq_random_exchange/README.md index 3f6f2662de..00dce95b1f 100644 --- a/deps/rabbitmq_random_exchange/README.md +++ b/deps/rabbitmq_random_exchange/README.md @@ -11,31 +11,13 @@ interested. ## Installation -Install the corresponding .ez files from our -[GitHub releases](https://github.com/rabbitmq/rabbitmq-random-exchange/releases) or [Community Plugins page](https://www.rabbitmq.com/community-plugins.html). - -Then run the following command: +This plugin ships with RabbitMQ. Like all other plugins, it must be enabled +before it can be used: ```bash -rabbitmq-plugins enable rabbitmq_random_exchange +[sudo] rabbitmq-plugins enable rabbitmq_random_exchange ``` -## Building from Source - -Please see [RabbitMQ Plugin Development guide](https://www.rabbitmq.com/plugin-development.html). - -To build the plugin: - - git clone git://github.com/rabbitmq/rabbitmq-random-exchange.git - cd rabbitmq-random-exchange - make - -Then copy all the `*.ez` files inside the `plugins` folder to the [RabbitMQ plugins directory](https://www.rabbitmq.com/relocate.html) -and enable the plugin: - - [sudo] rabbitmq-plugins enable rabbitmq_random_exchange - - ## Usage To create a _random_, just declare an exchange providing the type `"x-random"`. diff --git a/deps/rabbitmq_recent_history_exchange/BUILD.bazel b/deps/rabbitmq_recent_history_exchange/BUILD.bazel index 458d84861e..5ddd7ba9c4 100644 --- a/deps/rabbitmq_recent_history_exchange/BUILD.bazel +++ b/deps/rabbitmq_recent_history_exchange/BUILD.bazel @@ -42,6 +42,7 @@ plt( plt = "//:base_plt", apps = [ "mnesia" ], deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_recent_history_exchange/README.md b/deps/rabbitmq_recent_history_exchange/README.md index c22391ad7a..27cfd8945b 100644 --- a/deps/rabbitmq_recent_history_exchange/README.md +++ b/deps/rabbitmq_recent_history_exchange/README.md @@ -2,49 +2,21 @@ Keeps track of the last 20 messages that passed through the exchange. Every time a queue is bound to the exchange it delivers that last 20 messages to them. This is useful for implementing a very simple __Chat History__ where clients that join the conversation can get the latest messages. -Exchange Type: `x-recent-history` +Exchange yype: `x-recent-history`. ## Installation ## -### RabbitMQ 3.6.0 or later +This plugin ships with RabbitMQ. -As of RabbitMQ `3.6.0` this plugin is included into the RabbitMQ distribution. - -Enable it with the following command: - -```bash -rabbitmq-plugins enable rabbitmq_recent_history_exchange -``` - -### With Earlier Versions - -Install the corresponding .ez files from our -[Community Plugins archive](https://www.rabbitmq.com/community-plugins/).. - -Then run the following command: +Like all other plugins, it must be enabled before it can be used: ```bash -rabbitmq-plugins enable rabbitmq_recent_history_exchange +[sudo] rabbitmq-plugins enable rabbitmq_recent_history_exchange ``` -## Building from Source - -Please see [RabbitMQ Plugin Development guide](https://www.rabbitmq.com/plugin-development.html). - -To build the plugin: - - git clone git://github.com/rabbitmq/rabbitmq-recent-history-exchange.git - cd rabbitmq-recent-history-exchange - make - -Then copy all the `*.ez` files inside the `plugins` folder to the [RabbitMQ plugins directory](https://www.rabbitmq.com/relocate.html) -and enable the plugin: - - [sudo] rabbitmq-plugins enable rabbitmq_recent_history_exchange - ## Usage ## -### Creating an exchange ### +### Creating an exchange To create a _recent history exchange_, just declare an exchange providing the type `"x-recent-history"`. @@ -52,7 +24,7 @@ To create a _recent history exchange_, just declare an exchange providing the ty channel.exchangeDeclare("logs", "x-recent-history"); ``` -### Providing a custom history length ### +### Providing a custom history length Typically this exchange will store the latest 20 messages sent over the exchange. If you want to set a different cache length, then you @@ -67,13 +39,13 @@ args.put("x-recent-history-length", 60); channel.exchangeDeclare("rh", "x-recent-history", false, false, args); ``` -### Preventing some messages from being stored ### +### Preventing some messages from being stored In case you would like to not store certain messages, just add the header `"x-recent-history-no-store"` with the value `true` to the message. -## Disabling the Plugin ## +## Disabling the Plugin A future version of RabbitMQ will allow users to disable plugins. When you disable this plugin, it will delete all the cached messages. diff --git a/deps/rabbitmq_sharding/BUILD.bazel b/deps/rabbitmq_sharding/BUILD.bazel index 4e720a2f9f..6728a3a2b8 100644 --- a/deps/rabbitmq_sharding/BUILD.bazel +++ b/deps/rabbitmq_sharding/BUILD.bazel @@ -32,6 +32,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_shovel/BUILD.bazel b/deps/rabbitmq_shovel/BUILD.bazel index 409b19c871..5729a685d6 100644 --- a/deps/rabbitmq_shovel/BUILD.bazel +++ b/deps/rabbitmq_shovel/BUILD.bazel @@ -69,6 +69,7 @@ plt( apps = EXTRA_APPS, libs = ["//deps/rabbitmq_cli:elixir"], deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_shovel_management/BUILD.bazel b/deps/rabbitmq_shovel_management/BUILD.bazel index 25bb1054fc..f8c84f4e47 100644 --- a/deps/rabbitmq_shovel_management/BUILD.bazel +++ b/deps/rabbitmq_shovel_management/BUILD.bazel @@ -46,6 +46,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_stomp/BUILD.bazel b/deps/rabbitmq_stomp/BUILD.bazel index 70452b3ebf..01f32a056f 100644 --- a/deps/rabbitmq_stomp/BUILD.bazel +++ b/deps/rabbitmq_stomp/BUILD.bazel @@ -74,6 +74,7 @@ plt( plt = "//:base_plt", libs = ["//deps/rabbitmq_cli:elixir"], deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_stream/BUILD.bazel b/deps/rabbitmq_stream/BUILD.bazel index 44982505be..29b1221095 100644 --- a/deps/rabbitmq_stream/BUILD.bazel +++ b/deps/rabbitmq_stream/BUILD.bazel @@ -67,6 +67,7 @@ plt( ], libs = ["//deps/rabbitmq_cli:elixir"], deps = ["//deps/rabbitmq_cli:elixir"] + BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_stream_common/BUILD.bazel b/deps/rabbitmq_stream_common/BUILD.bazel index 4a562f26cb..43daaca35c 100644 --- a/deps/rabbitmq_stream_common/BUILD.bazel +++ b/deps/rabbitmq_stream_common/BUILD.bazel @@ -28,6 +28,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = BUILD_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_stream_management/BUILD.bazel b/deps/rabbitmq_stream_management/BUILD.bazel index a610f88a15..aa15aa4fa4 100644 --- a/deps/rabbitmq_stream_management/BUILD.bazel +++ b/deps/rabbitmq_stream_management/BUILD.bazel @@ -42,6 +42,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_top/BUILD.bazel b/deps/rabbitmq_top/BUILD.bazel index 8229af88aa..1ffa77a939 100644 --- a/deps/rabbitmq_top/BUILD.bazel +++ b/deps/rabbitmq_top/BUILD.bazel @@ -44,6 +44,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_tracing/BUILD.bazel b/deps/rabbitmq_tracing/BUILD.bazel index fb97a333b7..270d31444c 100644 --- a/deps/rabbitmq_tracing/BUILD.bazel +++ b/deps/rabbitmq_tracing/BUILD.bazel @@ -53,6 +53,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_trust_store/BUILD.bazel b/deps/rabbitmq_trust_store/BUILD.bazel index 24150d50dd..693c1d53f4 100644 --- a/deps/rabbitmq_trust_store/BUILD.bazel +++ b/deps/rabbitmq_trust_store/BUILD.bazel @@ -53,6 +53,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_web_dispatch/BUILD.bazel b/deps/rabbitmq_web_dispatch/BUILD.bazel index 6ef7812588..17ef5b34f0 100644 --- a/deps/rabbitmq_web_dispatch/BUILD.bazel +++ b/deps/rabbitmq_web_dispatch/BUILD.bazel @@ -46,6 +46,7 @@ plt( apps = EXTRA_APPS, plt = "//:base_plt", deps = DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_web_mqtt/BUILD.bazel b/deps/rabbitmq_web_mqtt/BUILD.bazel index 89c3e96005..9c059d3e18 100644 --- a/deps/rabbitmq_web_mqtt/BUILD.bazel +++ b/deps/rabbitmq_web_mqtt/BUILD.bazel @@ -63,6 +63,7 @@ plt( plt = "//:base_plt", apps = EXTRA_APPS, deps = BUILD_DEPS + DEPS + RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_web_mqtt_examples/BUILD.bazel b/deps/rabbitmq_web_mqtt_examples/BUILD.bazel index 590845bb48..2a2a60e377 100644 --- a/deps/rabbitmq_web_mqtt_examples/BUILD.bazel +++ b/deps/rabbitmq_web_mqtt_examples/BUILD.bazel @@ -38,6 +38,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_web_stomp/BUILD.bazel b/deps/rabbitmq_web_stomp/BUILD.bazel index c0d2c339c5..8ee588c773 100644 --- a/deps/rabbitmq_web_stomp/BUILD.bazel +++ b/deps/rabbitmq_web_stomp/BUILD.bazel @@ -62,6 +62,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = BUILD_DEPS + DEPS, + ignore_warnings = True, ) dialyze( diff --git a/deps/rabbitmq_web_stomp_examples/BUILD.bazel b/deps/rabbitmq_web_stomp_examples/BUILD.bazel index 90f580e190..3fd841ef45 100644 --- a/deps/rabbitmq_web_stomp_examples/BUILD.bazel +++ b/deps/rabbitmq_web_stomp_examples/BUILD.bazel @@ -38,6 +38,7 @@ plt( name = "base_plt", plt = "//:base_plt", deps = RUNTIME_DEPS, + ignore_warnings = True, ) dialyze( diff --git a/packaging/docker-image/BUILD.bazel b/packaging/docker-image/BUILD.bazel index fbe721f205..1ff369aa79 100644 --- a/packaging/docker-image/BUILD.bazel +++ b/packaging/docker-image/BUILD.bazel @@ -125,6 +125,7 @@ container_image( "@erlang_config//:erlang_25_1": ["@otp_src_25_1//file"], "@erlang_config//:erlang_25_2": ["@otp_src_25_2//file"], "@erlang_config//:erlang_25_3": ["@otp_src_25_3//file"], + "@erlang_config//:erlang_26": ["@otp_src_26//file"], }), ) diff --git a/release-notes/3.12.0.md b/release-notes/3.12.0.md index 36b921717d..815924d6c1 100644 --- a/release-notes/3.12.0.md +++ b/release-notes/3.12.0.md @@ -1,6 +1,6 @@ -## RabbitMQ 3.12.0-beta.6 +## RabbitMQ 3.12.0-beta.7 -RabbitMQ `3.12.0-beta.6` is a preview of a new feature release. +RabbitMQ `3.12.0-beta.7` is a preview of a new feature release. ## Highlights @@ -24,7 +24,7 @@ RabbitMQ releases are distributed via [GitHub](https://github.com/rabbitmq/rabbi and [PackageCloud](https://packagecloud.io/rabbitmq). -### Erlang/OTP Compatibility Notes +## Erlang/OTP Compatibility Notes This release [requires Erlang 25.0](https://www.rabbitmq.com/which-erlang.html) or later. This introduces feature parity for x86- and ARM64-based CPUs: Erlang 25 offers the JIT and @@ -34,6 +34,12 @@ for both of those major CPU architectures. [Provisioning Latest Erlang Releases](https://www.rabbitmq.com/which-erlang.html#erlang-repositories) explains what package repositories and tools can be used to provision latest patch versions of Erlang 25.x. +### Erlang 26 + +Erlang 26 introduces a number of breaking changes around networking and TLS. At the moment, +RabbitMQ should not be considered fully compatible with Erlang 26. Erlang 26 compatibility +will be announced separately. + ## Upgrading to 3.12 @@ -130,9 +136,9 @@ Release notes are kept under [rabbitmq-server/release-notes](https://github.com/ GitHub issue: [#6462](https://github.com/rabbitmq/rabbitmq-server/pull/6462) - * Initial Erlang 26 compatibility + * Initial (incomplete) Erlang 26 compatibility - GitHub issues: [#7443](https://github.com/rabbitmq/rabbitmq-server/pull/7443) + GitHub issues: [#7443](https://github.com/rabbitmq/rabbitmq-server/pull/7443), [#7900](https://github.com/rabbitmq/rabbitmq-server/pull/7900) * There is now a way to pre-configure users and their permissions for newly created virtual hosts: @@ -163,6 +169,11 @@ Release notes are kept under [rabbitmq-server/release-notes](https://github.com/ rabbitmqctl set_policy at-least-once-dead-lettering ".*" '{"dead-letter-strategy": "at-least-once"}' --apply-to quorum_queues ``` + * Reduced metric collection-induced memory use spikes every two minutes in environments with + a lot of mostly idle queues. + + GitHub issues: [#7825](https://github.com/rabbitmq/rabbitmq-server/pull/7825), [#7896](https://github.com/rabbitmq/rabbitmq-server/pull/7896) + * It is now possible to limit the maximum number of virtual hosts that can be created in the cluster. @@ -189,6 +200,10 @@ This release includes all bug fixes shipped in the `3.11.x` series. GitHub issue: [#7846](https://github.com/rabbitmq/rabbitmq-server/pull/7846) + * It is now possible to use streams in combination with the event exchange. + + GitHub issue: [#7846](https://github.com/rabbitmq/rabbitmq-server/pull/7846) + * [Superstream](https://blog.rabbitmq.com/posts/2022/07/rabbitmq-3-11-feature-preview-super-streams/) could fail to elect a single active consumer (SAC) in certain consumer churn conditions. @@ -249,6 +264,11 @@ This release includes all bug fixes shipped in the `3.11.x` series. GitHub issues: [#6015](https://github.com/rabbitmq/rabbitmq-server/pull/6015), [#6201](https://github.com/rabbitmq/rabbitmq-server/pull/6201), [#6247](https://github.com/rabbitmq/rabbitmq-server/pull/6247) + * **Potentially breaking** change: deprecated UAA-specific configuration keys were removed: + `management.enable_uaa`, `management.uaa_*`. + + GitHub issue: [](https://github.com/rabbitmq/rabbitmq-server/pull/7887) + #### Bug Fixes * Default queue type key used when add a virtual host via the HTTP API has changed from |