414 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Markdown
		
	
	
	
		
		
			
		
	
	
			414 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Markdown
		
	
	
	
|  | ## RabbitMQ 3.8.4
 | ||
|  | 
 | ||
|  | RabbitMQ `3.8.4` is a maintenance release. It focuses on bug fixes and usability | ||
|  | improvements. etcd [peer discovery](https://www.rabbitmq.com/cluster-formation.html) plugin includes potentially breaking changes which are covered in detail below. | ||
|  | 
 | ||
|  | This is the first release to be [fully compatible](https://groups.google.com/forum/#!topic/rabbitmq-users/wlPIWz3UYHQ) with [Erlang 23](http://blog.erlang.org/OTP-23-Highlights/). | ||
|  | 
 | ||
|  | ### Erlang/OTP Compatibility Notes
 | ||
|  | 
 | ||
|  | This release [**requires Erlang/OTP 21.3**](https://www.rabbitmq.com/which-erlang.html) 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, [Prometheus monitoring](https://www.rabbitmq.com/prometheus.html) 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. | ||
|  | 
 | ||
|  | [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 `22.3.x`. | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Upgrade and Compatibility Notes
 | ||
|  | 
 | ||
|  | ### Raft Segment File Format Change
 | ||
|  | 
 | ||
|  | 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. | ||
|  | 
 | ||
|  | ### Custom Prefixless Node Name
 | ||
|  | 
 | ||
|  | 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 | ||
|  | # how node name is typically overridden in rabbitmq-env.conf[.bat] files
 | ||
|  | NODENAME=rabbit@custom.hostname | ||
|  | # for CLI tools in 3.8.4, otherwise not necessary
 | ||
|  | RABBITMQ_NODENAME=rabbit@custom.hostname | ||
|  | ``` | ||
|  | 
 | ||
|  | This behaviour change compared to earlier `3.8.x` version was not intentional and was | ||
|  | [corrected for `3.8.5`](https://github.com/rabbitmq/rabbitmq-cli/pull/422). | ||
|  | 
 | ||
|  | Alternatively, it is possible to provide target node name using a command line flag: | ||
|  | 
 | ||
|  | ``` shell | ||
|  | rabbitmq-diagnostics -n rabbit@custom.hostname status | ||
|  | ``` | ||
|  | 
 | ||
|  | ### Upgrade Doc Guides and Change Log
 | ||
|  | 
 | ||
|  | See [3.8.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.8.0) upgrade and compatibility notes first if upgrading from an earlier release. | ||
|  | 
 | ||
|  | See the [Upgrading guide](https://www.rabbitmq.com/upgrade.html) for general documentation on upgrades and [RabbitMQ change log](https://www.rabbitmq.com/changelog.html) for release notes of other releases. | ||
|  | 
 | ||
|  | ### Upgrading to Erlang 21.x or Later Versions
 | ||
|  | 
 | ||
|  | 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. | ||
|  | 
 | ||
|  | ### Getting Help
 | ||
|  | 
 | ||
|  | Any questions about this release, upgrades or RabbitMQ in general are welcome on the [RabbitMQ mailing list](https://groups.google.com/forum/#!forum/rabbitmq-users). | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Changes Worth Mentioning
 | ||
|  | 
 | ||
|  | ### Core Server
 | ||
|  | 
 | ||
|  | #### Bug Fixes
 | ||
|  | 
 | ||
|  |  * 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: [rabbitmq/rabbitmq-server#2254](https://github.com/rabbitmq/rabbitmq-server/issues/2254) | ||
|  | 
 | ||
|  |  * 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: [rabbitmq/ra#176](https://github.com/rabbitmq/ra/pull/176) | ||
|  | 
 | ||
|  |  * A reached delivery limit on a quorum queue could result in an exception for polling (`basic.get`) consumers. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2330](https://github.com/rabbitmq/rabbitmq-server/pull/2330) | ||
|  | 
 | ||
|  |  * 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: [rabbitmq/rabbitmq-server#2295](https://github.com/rabbitmq/rabbitmq-server/pull/2295) | ||
|  | 
 | ||
|  |  * Separate authN and authZ backends did not behave as expected when `rabbitmq_auth_backend_cache` was enabled. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2322](https://github.com/rabbitmq/rabbitmq-server/issues/2322) | ||
|  | 
 | ||
|  |  * Handle a condition where epmd connection was closed during node registration. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2332](https://github.com/rabbitmq/rabbitmq-server/pull/2332) | ||
|  | 
 | ||
|  |  * Registering a quorum queue consumer did not result in a `consumer.created` event like it would | ||
|  |    for classic queues. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2341](https://github.com/rabbitmq/rabbitmq-server/issues/2341) | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * Reduced peak memory use of quorum queues that go idle (not under constant load). | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2272](https://github.com/rabbitmq/rabbitmq-server/pull/2272) | ||
|  | 
 | ||
|  |  * Change default configuration values for quorum queues to improve publisher back pressure when under heavy load. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2334](https://github.com/rabbitmq/rabbitmq-server/pull/2334) | ||
|  | 
 | ||
|  |  * Definition import is now partially concurrent, improving CPU utilisation and reducing the amount of time | ||
|  |    taken to import a large definition file. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2224](https://github.com/rabbitmq/rabbitmq-server/issues/2224) | ||
|  | 
 | ||
|  |  * 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: [rabbitmq/rabbitmq-server#2277](https://github.com/rabbitmq/rabbitmq-server/pull/2277) | ||
|  | 
 | ||
|  |  * More peer discovery errors are retried. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#1627](https://github.com/rabbitmq/rabbitmq-server/issues/1627) | ||
|  | 
 | ||
|  |  * Allow product name, version and MOTD to be overwritten via environment variables. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2247](https://github.com/rabbitmq/rabbitmq-server/pull/2247) | ||
|  | 
 | ||
|  |  * Improve display of product name and version. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2326](https://github.com/rabbitmq/rabbitmq-server/pull/2326) | ||
|  | 
 | ||
|  |  * Make RabbitMQ a regular Erlang/OTP application. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-server#2180](https://github.com/rabbitmq/rabbitmq-server/issues/2180) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### CLI Tools
 | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * New `rabbitmq-upgrade` commands: `await_online_quorum_plus_one` and `await_online_synchronized_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 | ||
|  |    # Exits with a non-zero exit code if there is not a quorum + 1 of nodes online for all | ||
|  |    # quorum queues within 120 seconds (default timeout) | ||
|  |    rabbitmq-upgrade await_online_quorum_plus_one | ||
|  |    # Will wait for a quorum + 1 of nodes to be online for all quorum queues for 0 seconds... | ||
|  | 
 | ||
|  |    # The timeout can be adjusted via the -t flag: | ||
|  |    rabbitmq-upgrade await_online_quorum_plus_one -t 60 | ||
|  |    # Will wait for a quorum + 1 of nodes to be online for all quorum queues for 60 seconds... | ||
|  | 
 | ||
|  |    # There is an equivalent command for classic mirrored queues | ||
|  |    rabbitmq-upgrade await_online_synchronized_mirror | ||
|  |    ``` | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-cli#409](https://github.com/rabbitmq/rabbitmq-cli/issues/409) | ||
|  | 
 | ||
|  |  * New `rabbitmq-diagnostics` command: `os_env` | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-cli#412](https://github.com/rabbitmq/rabbitmq-cli/pull/412) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Prometheus Plugin
 | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * Compatibility with Erlang 23 memory allocator metric format. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-prometheus#42](https://github.com/rabbitmq/rabbitmq-prometheus/issues/42) | ||
|  | 
 | ||
|  |  * Node color labeling in Grafana dashboards now works out of the box with one more common naming scheme. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-prometheus#33](https://github.com/rabbitmq/rabbitmq-prometheus/issues/33) | ||
|  | 
 | ||
|  |    Contributed by @Aakcht. | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Federation Plugin
 | ||
|  | 
 | ||
|  | #### Bug Fixes
 | ||
|  | 
 | ||
|  |  * Credential obfuscation now uses the same [shared secret](https://www.rabbitmq.com/clustering.html#erlang-cookie) | ||
|  |    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: [rabbitmq/rabbitmq-server#2351](https://github.com/rabbitmq/rabbitmq-server/pull/2351) | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * 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 [TTL](https://www.rabbitmq.com/ttl.html). | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-federation#105](https://github.com/rabbitmq/rabbitmq-federation/issues/105) | ||
|  | 
 | ||
|  |  * SNI is now enabled by default for TLS-enabled connections. | ||
|  | 
 | ||
|  |    Contributed by Carl Hörberg (CloudAMQP). | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-erlang-client#132](https://github.com/rabbitmq/rabbitmq-erlang-client/pull/132) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Shovel Plugin
 | ||
|  | 
 | ||
|  | #### Bug Fixes
 | ||
|  | 
 | ||
|  |  * Credential obfuscation now uses the same [shared secret](https://www.rabbitmq.com/clustering.html#erlang-cookie) | ||
|  |    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: [rabbitmq/rabbitmq-server#2351](https://github.com/rabbitmq/rabbitmq-server/pull/2351) | ||
|  | 
 | ||
|  |  * 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: [rabbitmq/rabbitmq-shovel#68](https://github.com/rabbitmq/rabbitmq-shovel/issues/68) | ||
|  | 
 | ||
|  |  * More negative AMQP 1.0 endpoint connection responses are handled. | ||
|  | 
 | ||
|  |    Contributed by Renaud @bougueil Mariana. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-amqp1.0-client#48](https://github.com/rabbitmq/rabbitmq-amqp1.0-client/pull/48) | ||
|  | 
 | ||
|  |  * Messages forwarded from an AMQP 0-9-1 source to an AMQP 1.0 destination now propagates more | ||
|  |    message properties. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-shovel#70](https://github.com/rabbitmq/rabbitmq-shovel/issues/70) | ||
|  | 
 | ||
|  |  * Pre-3.7 `delete-after` Shovel property is now considered as well as the new `src-delete-after` property. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-shovel#72](https://github.com/rabbitmq/rabbitmq-shovel/issues/72) | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * Revisited [Shovel documentation guides](https://www.rabbitmq.com/shovel.html). | ||
|  | 
 | ||
|  |  * SNI is now enabled by default for TLS-enabled connections. | ||
|  | 
 | ||
|  |    Contributed by Carl Hörberg (CloudAMQP). | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-erlang-client#132](https://github.com/rabbitmq/rabbitmq-erlang-client/pull/132) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Management Plugin
 | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * More frequent garbage collection by stats DB cache processes in environments where HTTP API queries produced | ||
|  |    large data sets. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-management#788](https://github.com/rabbitmq/rabbitmq-management/pull/788) | ||
|  | 
 | ||
|  |  * `rabbitmqadmin` CLI switches now take precedence over config file values. This is more typical | ||
|  |    for command line tools. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-management#804](https://github.com/rabbitmq/rabbitmq-management/issues/804) | ||
|  | 
 | ||
|  |  * `rabbitmqadmin` binding deletion now defaults to the same property key value as binding creation. | ||
|  | 
 | ||
|  |    Contributed by Ivan Kaloyanov. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-management#779](https://github.com/rabbitmq/rabbitmq-management/pull/779) | ||
|  | 
 | ||
|  | #### Bug Fixes
 | ||
|  | 
 | ||
|  |  * 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: [rabbitmq/rabbitmq-management#800](https://github.com/rabbitmq/rabbitmq-management/issues/800) | ||
|  | 
 | ||
|  |  * Queue page failed to render with a `TypeError` when stats were disabled. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-management#787](https://github.com/rabbitmq/rabbitmq-management/issues/787) | ||
|  | 
 | ||
|  |  * `rabbitmqadmin import` mangled non-ASCII characters. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-management#785](https://github.com/rabbitmq/rabbitmq-management/issues/785) | ||
|  | 
 | ||
|  |  * `rabbitmqadmin`'s pretty JSON format was not compatible with Python 3. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-management#797](https://github.com/rabbitmq/rabbitmq-management/pull/797) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### etcd Peer Discovery Plugin
 | ||
|  | 
 | ||
|  | This release effectively replaces the etcd-based peer discovery plugin with a new one which | ||
|  | [uses etcd v3 API](https://github.com/rabbitmq/rabbitmq-peer-discovery-etcd/issues/22) 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 [peer discovery only runs during cluster formation](https://www.rabbitmq.com/cluster-formation.html#peer-discovery-how-does-it-work). | ||
|  | 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. | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * 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. | ||
|  |    `cluster_formation.etcd.key_prefix` 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: [rabbitmq/rabbitmq-peer-discovery-etcd#22](https://github.com/rabbitmq/rabbitmq-peer-discovery-etcd/issues/22) | ||
|  | 
 | ||
|  |  * Multiple etcd endpoings now can be specified as connection candidates. Previously used endpoint configuration keys, | ||
|  |    `cluster_formation.etcd.host` and `cluster_formation.etcd.port`, are still supported and added to the final list of | ||
|  |    endpoints. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-peer-discovery-etcd#7](https://github.com/rabbitmq/rabbitmq-peer-discovery-etcd/issues/7) | ||
|  | 
 | ||
|  |  * Support for TLS-enabled connections to etcd. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-peer-discovery-etcd#24](https://github.com/rabbitmq/rabbitmq-peer-discovery-etcd/issues/24) | ||
|  | 
 | ||
|  |  * Support for [etcd authentication](https://etcd.io/docs/v3.4.0/op-guide/authentication/). | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-peer-discovery-etcd#6](https://github.com/rabbitmq/rabbitmq-peer-discovery-etcd/issues/6) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Consul Peer Discovery Plugin
 | ||
|  | 
 | ||
|  | #### Bug Fixes
 | ||
|  | 
 | ||
|  |  * 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: [rabbitmq/rabbitmq-peer-discovery-consul#41](https://github.com/rabbitmq/rabbitmq-peer-discovery-consul/issues/41) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### LDAP Plugin
 | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * 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 [rabbitmq-auth-backend-cache](https://github.com/rabbitmq/rabbitmq-auth-backend-cache) plugin. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-auth-backend-ldap#120](https://github.com/rabbitmq/rabbitmq-auth-backend-ldap/pull/120) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### OAuth 2.0 Plugin
 | ||
|  | 
 | ||
|  | #### Enhancements
 | ||
|  | 
 | ||
|  |  * When token key ID is missing in configuration, a warning will be logged to | ||
|  |    make troubleshooting easier. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-auth-backend-oauth2#44](https://github.com/rabbitmq/rabbitmq-auth-backend-oauth2/issues/44) | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Trust Store Plugin
 | ||
|  | 
 | ||
|  | #### Bug Fixes
 | ||
|  | 
 | ||
|  |  * Some debug messages were unintentionally logged as errors. | ||
|  | 
 | ||
|  |    Contributed by @mgrafl. | ||
|  | 
 | ||
|  |    GitHub issue: [rabbitmq/rabbitmq-trust-store#75](https://github.com/rabbitmq/rabbitmq-trust-store/issues/75) | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Dependency Upgrades
 | ||
|  | 
 | ||
|  |  * New dependency: [eetcd](https://github.com/zhongwencool/eetcd/) | ||
|  |  * ra was upgraded [from v1.0.8 to v1.1.2](https://github.com/rabbitmq/ra/compare/v1.0.8...v1.1.2) | ||
|  |  * `credentials_obfuscation` was upgraded [from v1.0.0 to v2.0.0](https://github.com/rabbitmq/credentials-obfuscation/compare/v1.0.0...v2.0.0) | ||
|  |  * Prometheus client was upgraded [from 4.5.0 to 4.6.0](https://github.com/deadtrickster/prometheus.erl/compare/v4.5.0...v4.6.0) | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Source code archives
 | ||
|  | 
 | ||
|  | **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`. |