Project: RabbitMQ (App Definition and Development / Streaming & Messaging)
File: 3.8.4.md

RabbitMQ `3.8.4` is a maintenance release. It focuses on bug fixes and usability improvements. etcd plugin includes potentially breaking changes which are covered in detail below. This is the first release to be with . This release or later. `22.3` or `23.0` releases are recommended. This is the first release to officially support Erlang 23. Compared to `3.8.3`, which generally works as expected on Erlang 23, plugin had to be adapted to support a memory allocator metric format that has changed compared to earlier Erlang releases. There is one remaining known Erlang 23 incompatibility: `rabbitmq-diagnostics observer` will fail on Erlang 23. This will be addressed in a future release. The root cause is the same memory allocator metric change. explains what package repositories and tools can be used to provision latest patch versions of Erlang `22.3.x`. In earlier `3.8.x` versions, Raft log segment files were unintentionally limited to 4 GiB, which can be problematic for environments that use quorum queues and medimum to large message payloads. This releases removes the limitation by changing the segment file on-disk format. While no action is required for upgrading to `3.8.4`, operators should keep in mind that segment files produced by `3.8.4` nodes won't be readable by earlier versions. In other words, this release does not support downgrading to earlier `3.8.x` versions. Environments that override node name using `NODENAME` in `rabbitmq-env.conf` may have to also define `RABBITMQ_NODENAME` in the same file for CLI tools to pick the value up: ``` ini NODENAME=rabbit@custom.hostname RABBITMQ_NODENAME=rabbit@custom.hostname ``` This behaviour change compared to earlier `3.8.x` version was not intentional and was . Alternatively, it is possible to provide target node name using a command line flag: ``` shell rabbitmq-diagnostics -n rabbit@custom.hostname status ``` See upgrade and compatibility notes first if upgrading from an earlier release. See the for general documentation on upgrades and for release notes of other releases. When upgrading to this release from `3.7.6` or an older version, extra care has to be taken. Since CLI tools from RabbitMQ releases older than 3.7.7 will fail on Erlang 21 or later, RabbitMQ must be upgraded at the same time as Erlang. Alternatively the node can be upgraded to `3.7.18` first, then Erlang 22.x or 23.x, then RabbitMQ to most recent 3.8.x release. Any questions about this release, upgrades or RabbitMQ in general are welcome on the . A node recovering a large disk backlog did not throttle its recovery activity, potentially using large amounts of memory at peak during recovery. GitHub issue: Raft log segment files were unintentionally limited to 4 GiB in size, which could result in failing log flush operations in environments where medium and large messages were published to quorum queues. This problem is addressed by a change to the on disk format of Raft log segment files. The change is irreversible, meaning that there is no downgrade path from `3.8.4` to earlier releases. GitHub issue: A reached delivery limit on a quorum queue could result in an exception for polling (`basic.get`) consumers. GitHub issue: A publish to a quorum queue that happened to not have an elected leader failed with an exception. Such operations are generally expected to be retried by channels. GitHub issue: Separate authN and authZ backends did not behave as expected when `rabbitmqauthbackend_cache` was

GitHub issue: Handle a condition where epmd connection was closed during node registration. GitHub issue: Registering a quorum queue consumer did not result in a `consumer.created` event like it would for classic queues. GitHub issue: Reduced peak memory use of quorum queues that go idle (not under constant load). GitHub issue: Change default configuration values for quorum queues to improve publisher back pressure when under heavy load. GitHub issue: Definition import is now partially concurrent, improving CPU utilisation and reducing the amount of time taken to import a large definition file. GitHub issue: Improved configuration merging for cases when multiple files are used, e.g. `rabbitmq.conf` plus `advanced.config` or even multiple `.conf` files (the latter is an experimental feature). GitHub issue: More peer discovery errors are retried. GitHub issue: Allow product name, version and MOTD to be overwritten via environment variables. GitHub issue: Improve display of product name and version. GitHub issue: Make RabbitMQ a regular Erlang/OTP application. GitHub issue: New `rabbitmq-upgrade` commands: `awaitonlinequorumplusone` and `awaitonlinesynchronized_mirror`. The commands will wait for a safe quorum of nodes (quorum queues) or a synchronised leader replica (classic mirrored queues) to be or come online within a period of time. ``` sh rabbitmq-upgrade awaitonlinequorumplusone rabbitmq-upgrade awaitonlinequorumplusone -t 60 rabbitmq-upgrade awaitonlinesynchronized_mirror ``` GitHub issue: New `rabbitmq-diagnostics` command: `os_env` GitHub issue: Compatibility with Erlang 23 memory allocator metric format. GitHub issue: Node color labeling in Grafana dashboards now works out of the box with one more common naming scheme. GitHub issue: Contributed by @Aakcht. Credential obfuscation now uses the same on all nodes to make sure that a link running on node A can be restarted by a command against node B. Previously each node used its own generated secret for obfuscation, which means certain operations on links originated on other nodes were not possible. GitHub issue: Internal resources cleanup is now more selective on abnormal link termination. A new upstream parameter, `resource-cleanup-mode`, can be set to `"never"` used to prevent internal queues from being deleted by exchange federation links on termination. Use this when data safety is more important than protection from resource leaks. It then will be up to the operator to make sure such resources are periodically deleted or use a suitable . GitHub issue: SNI is now enabled by default for TLS-enabled connections. Contributed by Carl Hrberg (CloudAMQP). GitHub issue: Credential obfuscation now uses the same on all nodes to make sure that a shovel running on node A can be restarted by a command against node B. Previously each node used its own generated secret for obfuscation, which means certain operations on shovels originated on other nodes were not possible. GitHub issue: Shovels are now correctly removed even when deletion commands are executed against a different node (not the one on which the target Shovel has been created). GitHub issue: More negative AMQP 1.0 endpoint connection responses are handled. Contributed by Renaud @bougueil Mariana. GitHub issue: Messages forwarded from an AMQP 0-9-1 source to an AMQP 1.0 destination now propagates more message properties. GitHub issue: Pre-3.7 `delete-after` Shovel property is now considered as well as the new `src-delete-after` property. GitHub issue: Revisited . SNI is now enabled by default for TLS-enabled connections. Contributed by Carl Hrberg (CloudAMQP). GitHub issue: More frequent garbage collection by stats DB cache processes in environments where HTTP API queries produced large data

GitHub issue: `rabbitmqadmin` CLI switches now take precedence over config file values. This is more typical for command line tools. GitHub issue: `rabbitmqadmin` binding deletion now defaults to the same property key value as binding creation. Contributed by Ivan Kaloyanov. GitHub issue: TLS settings of this plugin now supersede those of RabbitMQ core listeners. In more practical terms, it is now possible to use a separate set of certificate/private key pairs for management UI and the HTTP API. GitHub issue: Queue page failed to render with a `TypeError` when stats were disabled. GitHub issue: `rabbitmqadmin import` mangled non-ASCII characters. GitHub issue: `rabbitmqadmin`'s pretty JSON format was not compatible with Python 3. GitHub issue: This release effectively replaces the etcd-based peer discovery plugin with a new one which and a different API client. etcd v2 API has been effectively deprecated and requires extra effort to enable with the latest etcd release, so this was treated as a medium severity bug and ships in a patch release. There are several new features that come with this new client. Existing already formed clusters won't have to change anything in the short term as . All configuration keys of the original plugin are still accepted by the plugin, and most will have the expected or semantically similar effect. When provisioning new clusters, etcd 3.4+ will now be required. The plugin now uses an etcd v3 API client and v3 gRPC-based API. This includes using a forward-compatible API version, natively-provided endpoint for locking instead of reinventing one, and other improvements listed below. It also means that etcd 3.4+ is now required by the plugin. Unless specified otherwise, all other configuration settings of the original plugin are still supported. `rabbitmq-autocluster`-era environment variable-based configuration of the plugin has been removed. Use the config file-based one instead. `cluster_formation.etcd.scheme` configuration key won't fail validation but will no longer have any effect. `clusterformation.etcd.keyprefix` will be used but only after the hardcoded `/rabbitmq/discovery` and `/rabbitmq/locks` prefixes. Having a predictable key prefix is more important in this version of the etcd API. GitHub issue: Multiple etcd endpoings now can be specified as connection candidates. Previously used endpoint configuration keys, `clusterformation.etcd.host` and `clusterformation.etcd.port`, are still supported and added to the final list of endpoints. GitHub issue: Support for TLS-enabled connections to etcd. GitHub issue: Support for . GitHub issue: In case `CONSUL_PORT` is set to a blank string, the plugin will fall back to the default port value instead of failing with an exception. Note that the use of environment variables over config file keys is highly discouraged and will be removed in a future version. GitHub issue: Setting `` to `0` will force a new connection to be opened for every operation. This helps work around obscure issues likely caused by per-connection caching in some LDAP implementations. Users of this setting are expected to also use the plugin. GitHub issue: When token key ID is missing in configuration, a warning will be logged to make troubleshooting easier. GitHub issue: Some debug messages were unintentionally logged as errors. Contributed by @mgrafl. GitHub issue: New dependency: ra was upgraded `credentials_obfuscation` was upgraded Prometheus client was upgraded Warning: The source code archive provided by GitHub only contains the source of the broker, not the plugins or the client libraries. Please download the archive named `rabbitmq-server-3.8.4.tar.xz`.