Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v5.8.4
->v5.8.5
Release Notes
emqx/emqx (emqx/emqx)
v5.8.5
: EMQX v5.8.5Compare Source
Enhancements
Core MQTT Functionalities
#14454 Introduced
max_publish_rate
option for the retainer. The option controls the maximum allowed rate of publishing retained messages in each node. Any messages published beyond this limit will still be delivered but will not be stored as retained.This option is useful to limit the load on the configured retained message storage.
#14456 Introduced a simple firewall script,
bin/emqx_fw
, to protect EMQX listeners from SYN flooding attacks. This feature is available for Linux only.#14496 Added extra validation for the
root_keys
parameters inPOST /data/export
API. Now, invalid root keys will result in an error instead of being silently ignored.Access Control
#14494 Enhanced MongoDB authorization with support for complex queries.
$orderby
operator in selector filter configuration, enabling sorting of query results in authorization checks.skip
andlimit
options for better pagination and control over query results in MongoDB-based authorization.#14570 Added support for using placeholders in HTTP Headers for HTTP Authentication and Authorization configurations.
#14665 Added support for client attributes as ACL rule pre-conditions. You can now create ACL rules based on client attributes, allowing more fine-grained control over access.
For example, the following rule allows clients with a
"type"
attribute set to"internal"
to publish or subscribe to all topics:{allow, {client_attr, "type", "internal"}, all, ["#"]}.
And the rule below denies clients with a
"type"
attribute prefixed with"external-"
from publishi any messages:{deny, {client_attr, "type", {re, "external-.*"}}, publish, ["#"]}.
Rule Engine
$events/sys/alarm_activated
and$events/sys/alarm_deactivated
. These are triggered when system alarms are activated and deactivated.Data Integration
no-local
flag to MQTT Source. Theno-local
flag can now be configured in MQTT Source settings to prevent messages published by a client from being received by that same client.GET /actions_summary
andGET /sources_summary
. These new APIs provide a more concise overview of actions and sources, similar to the existingGET /actions
andGET /sources
APIs, but without returning the full configurations of the entities, making them faster and less resource-intensive.Observability
emqx_vm_mnesia_tm_mailbox_size
andemqx_vm_broker_pool_max_mailbox_size
. These gauges track the mailbox sizes of internal EMQX processes that can indicate system overload. Additionally, alarms will be raised when mailbox sizes surpass certain high watermarks.debug
andwarning
levels, respectively.MQTT over QUIC
#14583 The QUIC listener now supports dumping TLS secrets to the
SSLKEYLOGFILE
environment variable, enabling tools like Wireshark to decrypt live or captured QUIC traffic. This allows for decoding MQTT packets within the QUIC traffic.Example configuration:
EMQX_LISTENERS__QUIC__DEFAULT__SSLKEYLOGFILE=/tmp/EMQX_SSLKEYLOGFILE
Note: This is a hidden configuration intended for troubleshooting purposes only.
#14597 Asynchronous abort stream read during connection termination.
In scenarios where a session is "taken over", "discarded", or "kicked", the previous connection termination process involved a graceful stream shutdown. This could result in blocking delays of up to 3 seconds if the old client was unresponsive.
This issue occurred because graceful shutdown relies on cooperative signaling between both endpoints, ensuring the MQTT.DISCONNECT packet is delivered to the peer before the transport is closed. If the peer was unresponsive, this approach caused unnecessary delays.
With this improvement, the stream is now half-closed during termination. The read (recv) operation aborted, while the write (send) operation remains open. This adjustment ensures that the MQTT.DISCONNECT packet is still delivered to the peer, properly signaling the shutdown, without unnecessary delays.
Benefits:
Bug Fixes
Core MQTT Functionalities
#14405 Converted
256MB
to268435455
bytes formqtt.max_packet_size
.EMQX previously allowed setting
256MB
formqtt.max_packet_size
config, which is in fact one byte more than what the protocol specification allows. For backward compatibility,mqtt.max_packet_size=256MB
is still allowed from configurations but will be silently converted to268435455
.#14508 Improved the EMQX performance when large numbers of clients reconnect.
#14608 Enforced First-In-First-Out (FIFO) semantics in MQTT session message queue. The MQTT session message queue now strictly follows FIFO semantics when it reaches its capacity. When the queue is full, the oldest message will be dropped first.
#14609 Corrected high memory threshold for overload protection to use
sysmon.os.sysmem_high_watermark
. The high memory threshold is now properly updated during the boot process or wheneversysmon.os.sysmem_high_watermark
is changed. This ensures the memory overload protection threshold is dynamic and reflects changes to the system memory settings.#14654 Clients can now reconnect successfully even if the maximum session limit has been reached, as long as their previous sessions remain active (i.e., not expired or cleaned up).
#14588 Improved memory usage reporting when EMQX runs in a containerized environment. In containerized environments like Amazon Elastic Kubernetes Service (AWS EKS), the accuracy of memory usage readings can be influenced by factors such as the host kernel version, cgroup version, and how the container management service mounts cgroupfs. This update improves the accuracy of memory usage reporting when EMQX runs in AWS EKS, specifically addressing discrepancies caused by the container environment.
Authentication
Gateway
#14484 Fixed an issue where the Exproto gateway did not support using hostname in the server endpoint.
#14489 Fixed issue where accessing the
api/v5/gateways
endpoint resulted in a 500 error if the gateway was not enabled on the node in the cluster. Now, such requests return a more appropriate response, preventing crashes and improving the stability of the API in these scenarios.#14501 Fixed issue where the gateway client query HTTP API always returned a keepalive value of 0. The correct keepalive value is now returned by the HTTP API, and the gateway adheres to the configured idle timeout, properly reflecting the client's heartbeat settings.
#14503 Returns an empty list instead of a 404 error if no listener exists at the gateway. Previously, when accessing the listeners page of a gateway (such as LwM2M) through the API, a 404 error would be returned if no listeners were configured. This fix changes the behavior to return an empty list when no listeners exist.
#14511 Eliminated unnecessary log printing by the Stomp gateway when client authentication fails.
#14653 Fixed stomp gateway keepalive behavior. Previously, the STOMP connection's heartbeat mechanism would fail to keep the connection alive if the heartbeat packet was received slightly after the check timer. This update introduces tolerance for minor delays, ensuring that the connection will stay alive. On average, the connection closure now occurs at approximately 1.5 times the heartbeat interval, providing more reliable keepalive functionality.
Data Integration
#14518 This update ensures that Connectors are now started asynchronously when loading from configuration, whether via CLI or HTTP API. Previously, if a connector hung during startup, it could cause the entire configuration import process to time out.
Additionally, connectors are now started asynchronously when (re)starting a node, resulting in faster boot-up times. This release also fixes a potential issue where a Source could be added to the configuration before its corresponding Connector, ensuring correct initialization order during configuration import.
#14550 Fixed an issue where MQTT clients in the connection pool of an MQTT Connector would fail to reconnect automatically if only a few clients were disconnected. The fix ensures clients are automatically reconnected when disconnected, improving connection reliability.
#14555 Fixed an issue with MQTT Source where shared topics were not properly unsubscribed from when a source was removed or updated.
#14671 Fixed an issue in MQTT Action. Before the fix, messages could fail to be sent or retried due to a rare race condition when the MQTT Connector's connection was closed. This update ensures that TCP connection closures (
tcp_closed
) and client disconnections are handled as recoverable errors.#14695 Improved HTTP API error messages when attempting to update a Connector and a validation error occurs.
#14697 Fixed a problem in which, when a Source and an Action shared the same name and used the same connector, one could not delete the Action or Source if there were rule dependencies on the dual Source/Action.
Clustering
#14536 Fixed rare race condition in cluster management operations. Before the fix, the race condition caused certain cluster management operations to hang, making cluster changes impossible until a node restarts. This issue was addressed by tightening the global lock guarding
mria:join/1
operations. The stricter locking prevents concurrent joins from interfering with each other.#14548 Fixed an issue where a node would crash during reboot if a new node joined the cluster while it was down, resulting in a
** FATAL ** Failed to merge schema: {aborted,function_clause}
error. This fix ensures that nodes can now restart smoothly without requiring a rejoin to the cluster.#14662 Fixed an issue where a running replicant node, after rejoining a cluster in which all core nodes had their internal databases wiped, would fail to participate in certain Remote Procedure Call (RPC) call operations.
Administration
Breaking changes
force_shutdown.max_heap_size
, which is now set to128GB
. If themax_heap_size
was previously set to a value exceeding 128GB, this could lead to issues after upgrading, such as during configuration reloading or updates.Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.