RabbitMQ 4.3.3
- Password salts are now generated using a cryptographically secure pseudo-random number generator
- Minimum supported Erlang version is now 27.0; Erlang/OTP 26 is no longer supported
- Socket-level metric collection now handles concurrently closed connections safely
- Quorum queue, Khepri and other Raft leaders no longer optimistically commit new log entries in certain scenarios
- Quorum queues using at-least-once dead lettering no longer get permanently stuck after repeated queue membership changes
- Classic queue index directory paths no longer accumulate slashes that could cause enametoolong file system errors
- Enabling the tie_binding_to_dest_with_keep_while_cond feature flag no longer fails with an exception on certain exchange-to-exchange topologies
- Invalid consumer_timeout configuration values now fall back to the default value of 24 hours
- AMQP 1.0 management operations declaring an exchange with an alternate exchange now verify necessary permissions on the alternate exchange
- AMQP 1.0 management GET /bindings operations now behave consistently with other binding-related handlers
- Worker pool processes no longer terminate when receiving unexpected messages
- Race condition between concurrent queue or virtual host deletion and Ra cluster shutdown no longer logs exceptions
- Closing channels or connections that fail to send channel.close_ok on already terminated writers or sockets no longer produce excessive logging
- Unexpected failures during channel termination cleanup no longer produce excessive logging
- Code paths using rabbit_queue_type_util:erpc_call/5 now handle more error conditions
- Nodes no longer fail to start with bad_generator exception when a quorum queue record has decorators set to undefined
- Enabling tracing on multiple virtual hosts concurrently no longer silently drops some virtual hosts from the traced set
- rabbitmq-plugins commands now tolerate plugins listed as enabled but not installed
- rabbitmq-plugins list no longer outputs an empty plugin table when the target node cannot be reached
- rabbitmq-plugins commands now correctly handle file paths of remote nodes and validate remote nodes in offline mode
RabbitMQ 4.3.3 is a maintenance release in the 4.3.x release series.
It is strongly recommended that you read 4.3.0 release notes
in detail if upgrading from a version prior to 4.3.0.
Minimum Supported Erlang Version
Important: starting with this release, the minimum supported Erlang version is 27.0. Erlang/OTP 26 has reached
end of life and is no longer supported.
GitHub issue: #16914
RabbitMQ and Erlang/OTP Compatibility Matrix has more details on Erlang version requirements for RabbitMQ.
Nodes will fail to start on older Erlang releases.
Changes Worth Mentioning
Release notes can be found on GitHub at rabbitmq-server/release-notes.
Core Server
Bug Fixes
-
Quorum queue, Khepri and other Raft leaders could optimistically commit new log entries in certain scenarios.
GitHub issue: rabbitmq/ra#637
-
Quorum queues that use
at-least-oncedead lettering could get their dead lettering process permanently stuck after repeated queue membership changes.GitHub issue: #16652
-
Classic queue index directory paths could accumulate slashes, eventually failing with an
enametoolongfile system error.GitHub issue: #16833
-
Enabling the
tie_binding_to_dest_with_keep_while_condfeature flag could fail with an exception when certain exchange-to-exchange topologies.GitHub issue: #16824
-
An invalid
consumer_timeoutvalue in the configuration now falls back to the default value (24 hours) instead of being used as is.GitHub issue: #16799
-
AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify the necessary permissions on the alternate exchange, matching AMQP 0-9-1.
GitHub issue: #16785
-
AMQP 1.0 management
GET /bindingsoperations now behave consistently with the rest of the binding-related handlers.GitHub issue: #16790
-
Worker pool processes no longer terminate when they receive an unexpected message.
Contributed by @Ayanda-D.
GitHub issue: #16666
-
A race condition between concurrent queue (or virtual host) deletion and a Ra cluster shutdown could log an exception.
Contributed by @Ayanda-D.
GitHub issue: #16880
-
A closing channel (connection) that failed to send
channel.close_okon an already terminated writer or socket no longer produce log noise.Contributed by @Ayanda-D.
GitHub issue: #16651
-
Unexpected failures during channel termination cleanup no longer produce log noise.
Contributed by @Ayanda-D.
GitHub issue: #16740
-
Code paths that use
rabbit_queue_type_util:erpc_call/5now handle more errors.Contributed by @Ayanda-D.
GitHub issue: #16701
-
Nodes could fail to start with a
bad_generatorexception inrabbit_queue_decorator:select/1when a quorum queue record in the metadata store had its decorators set toundefined. -
Enabling tracing on multiple virtual hosts concurrently could silently drop some of the virtual hosts from the traced set. All virtual host tracing state modifications are now linearized.
Enhancements
-
Password salts are now generated using a cryptographically secure pseudo-random number generator (CSPRNG).
GitHub issue: #16775
-
Socket-level metric collection used by several protocol readers and the management agent now handles concurrently closed connections safely.
Inspired by a contribution of @MugemaneBertin2001.
CLI Tools
Bug Fixes
-
rabbitmq-pluginscommands now tolerate plugins that are listed as enabled but are not installed.GitHub issue: #16896
-
rabbitmq-plugins listno longer outputs an empty plugin table when the target node cannot be reached.GitHub issue: #16791
-
rabbitmq-pluginscommands now correctly handle file paths of remote nodes, validate remote nodes in offline mode, and no longer report false positives forrabbitmq-plugins is_enabled.GitHub issue: #16842
-
Shell (Bash, zsh) command completion fixes.
Contributed by @Chr1s70ph.
GitHub issue: #16776
Enhancements
-
rabbitmq-queuesandrabbitmq-streamsnow providetransfer_leadershipcommands for individual queues and streams.GitHub issue: #16757
-
rabbitmq-upgrade drainsafety improvements: the command now handles certain failures more gracefully.Proposed by @MugemaneBertin2001.
Stream Plugin
Bug Fixes
-
Permissions required for certain stream protocol operations were adjusted to be consistent with comparable operations over other protocols.
GitHub issue: #16754
Enhancements
-
The maximum number of super stream partitions is now limited to 1,000 partitions by default. This limit can be increased using the
stream.max_super_stream_partitionskey inrabbitmq.conf. -
A client RPC timeout is now logged as a concise message instead of an exception with a stack trace.
Contributed by @MugemaneBertin2001.
Management Plugin
Bug Fixes
-
OAuth 2 login could fail in Safari. A new token endpoint proxy is now used for the affected authorization flow.
-
Several management UI templates now use safe string escaping in more places.
-
HTTP API message publishing endpoint now uses a timeout when waiting for publisher confirms.
GitHub issue: #16911
Enhancements
-
Definition export over the HTTP API is now significantly more efficient and transfers the result using HTTP response streaming.
GitHub issue: #16734
-
The
Referrer-PolicyHTTP response header is now set (and configurable).GitHub issue: #16893
-
The
AllowHTTP response header can now be excluded from HTTP API responses.GitHub issue: #16907
-
HTTP API error responses were refactored to be more consistent and expose fewer internal details.
GitHub issue: #16709
-
HTTP access log entries for OAuth 2-authenticated requests now use the username determined by the authentication backend (e.g.
preferred_username) instead of the client ID. -
Definition file uploads via the management UI now require a
.jsonfile extension (enabled via a feature switch).GitHub issue: #16946
OAuth 2 AuthN and AuthZ Backend Plugin
Bug Fixes
-
Fractional
exp(token expiry) timestamp values are now honored.GitHub issue: #16713
Enhancements
-
The token refresh path is now more robust.
GitHub issue: #16858
Shovel Plugin
Bug Fixes
-
Several shovel bug fixes, including one for static shovel URIs whose credentials could be logged.
-
A shovel deleted before it successfully connected (in the
startingstate) no longer leaks its status entry.GitHub issue: #16767
-
Improved network failure recovery for shovels.
GitHub issue: #16662
Enhancements
-
Shovels with AMQP 1.0 sources now support the
src-consumer-argsparameter.GitHub issue: #16800
Federation Plugin
Bug Fixes
-
Federation upstream URIs are now validated more strictly.
GitHub issue: #16942
-
Improved network failure recovery for shovels.
GitHub issue: #16662
-
Exchange federation links now trap exits later in the initialization process, avoiding confusing timeouts and log noise.
GitHub issue: #16801
MQTT Plugin
Enhancements
-
More correct peer host detection in setups that have Proxy Protocol enabled.
GitHub issue: #16933
STOMP Plugin
Enhancements
-
Internal socket handling refactoring shared by STOMP and Web STOMP connections.
GitHub issue: #16935
Web MQTT Plugin
Enhancements
-
More correct peer host detection in setups that have Proxy Protocol enabled.
GitHub issue: #16933
-
The HSTS response header policy can now be configured for Web MQTT listeners.
Web STOMP Plugin
Enhancements
-
More correct peer host detection in setups that have Proxy Protocol enabled.
GitHub issue: #16933
-
The HSTS response header policy can now be configured for Web STOMP listeners.
LDAP AuthN and AuthZ Backend Plugin
Bug Fixes
-
Additional DN escaping (RFC 4514) improvements
GitHub issue: #16712
JMS Topic Exchange Plugin
Enhancements
-
JMS selector evaluation now uses much smaller, safer limits.
GitHub issue: #16951
AWS Peer Discovery Plugin
Bug Fixes
-
Fixed a SigV4 request signing issue (
SignatureDoesNotMatch) for body-less requests such as S3GETs.Contributed by @sdewhitt.
GitHub issue: #16759