8000 Releases · emqx/emqx · GitHub
[go: up one dir, main page]

Skip to content

Releases: emqx/emqx

EMQX Enterprise 5.9.2

14 Nov 12:20
@id id

Choose a tag to compare

Enhancements

Core MQTT Functionalities

  • #15773 Throttled client ID registration during reconnects.
    • When a previous session cleanup is still in progress, new connections using the same client ID are now throttled. This prevents instability when clients reconnect aggressively.
    • Affected clients receive reason code 137 (Server Busy) in the CONNACK with Reason-String "THROTTLED", and should retry after the cleanup completes.
    • Fixed the reason code returned when another connection registers the same client ID; now correctly returns 137 instead of 133.

Data Integration

  • #15542 Upgraded our erlcloud library to 3.8.3.0. This allows one to set up a S3 Connector without specifying Access Key Id and Secret Access Key, so long as the EC2 instance EMQX is running in has the correct IAM permissions to read/write to the configured bucket(s).

  • #15585 Updated the brod client to version 4.4.4, expanding support for a wider range of Kafka APIs. This update addresses the deprecation of JoinGroups API versions v0 - v1.

  • #15845 The static_clientids configuration for the MQTT Connector now supports specifying a username and password for each client ID. This is particularly useful for scenarios like connecting to Azure IoT Hub, where each device (client ID) requires a unique set of credentials. This enhancement helps ensure successful connections across multiple nodes in a clustered environment.

  • #15911 The HTTP request timeout for the HTTP Action is now configurable via the resource_opts.request_ttl setting. Previously, this timeout was fixed at 30 seconds and could not be adjusted.

Observability

  • #15499 Added a force deactivate alarm API endpoint to allow administrators to forcibly deactivate active alarms.

  • #15944 Improved the information returned when a resource is marked as disconnected for the following Connectors: LDAP, Syskeeper, IoTDB, Snowflake (aggregated), JWKS Authentication.

Performance

  • #15536 Disable the node.global_gc_interval configuration by default.

  • #15539 Optimized Erlang VM parameters to improve performance and stability:

    • Increased buffer size for distributed channels to 32 MB (+zdbbl 32768) to prevent busy_dist_port alarms during intensive Mnesia operations.
    • Disabled scheduler busy-waiting (+sbwt none +sbwtdcpu none +sbwtdio none) to lower CPU usage reported by the operating system.
    • Set scheduler binding type to db (+stbt db) to reduce message latency.
  • #15907 Improve system memory usage.

    • Authorization (authz) cache is now cleared immediately when a client disconnects, reducing unnecessary memory consumption.
    • Fields such as client ID, username, password, and topic are copied into new binaries (when more than 64 bytes) instead of being slices from the raw packet to reduce 'binary' part of memory usage in Erlang VM.
  • #15949 Changed the default value of the parse_unit option in listener configuration from chunk to frame. This change can significantly reduce CPU usage when the payload size exceeds the socket buffer (default is 4 KB).

    Note: With parse_unit = frame, if a PUBLISH packet exceeds the maximum allowed size, EMQX will close the connection instead of sending a DISCONNECT packet.

  • #16165 Optimized the performance of the GET /clients_v2 API. Previously, when the cluster had around 50,000 clients or more, API calls to retrieve the client list could be extremely slow or even time out.

Bug Fixes

Core MQTT Functionalities

  • #15884 Resolved an issue where, in rare cases, the global routing table could indefinitely retain routing information for nodes that had long left the cluster.

  • #15518 Resolved a race condition that may lead to accumulating inconsistencies in the routing table and shared subscriptions state in the cluster when a large number of shared subscribers disconnect simultaneously.

  • #15872 Eliminated warning log unclean_terminate when disconnected after CONNACK is sent with a non-zero reason code.

Deployment

  • #15553 Fixed an issue in the Helm chart where deploying EMQX with default values started multiple replicas and caused all nodes except one to crash. The chart now defaults to a single replica, since clustered deployments require an Commercial License.

  • #15580 Added a new emqxLicenseSecretRef variable to the EMQX Enterprise Helm chart. This allows users to specify a Kubernetes Secret containing the EMQX license key, so the license is applied automatically.

    This replaces the non-functional emqxLicenseSecretName variable, which created and mounted a secret file but did not pass the license to EMQX.

  • #15712 Fixed node boot-up failure during rolling upgrade from older versions (before 5.9)

    In previous EMQX versions (before 5.9), a bug in the ZIP timestamp encoder could store an invalid “seconds” value in archive entries (values corresponding to the 30th or 31st 2-second slot in DOS time format).

  • #15863 Fixed the license quota alarm message to correctly reflect session quotas instead of live connections.

Security

  • #15581 Upgraded Erlang/OTP version from 26.2.5.2 to 26.2.5.14. This upgrade includes two TLS-related fixes from OTP that affect EMQX:

    • Fixed a crash in TLS connections caused by a race condition during certificate renewal.
    • Added support for RSA certificates signed with RSASSA-PSS parameters. Previously, such certificates could cause TLS handshakes to fail with a bad_certificate / invalid_signature error.
  • #16237 Fixed an issue where OIDC SSO–related logs might still be printed even after SSO was disabled.

  • #16217 Fixed an issue where the OIDC login callback could fail to locate the user session in multi-node cluster environments.

Access Control

  • #15818 Corrected handling of {allow|deny, all} ACL rules.

    Previously, these rules were internally translated to match #, which incorrectly failed to match topics prefixed with $ (e.g. $testtopic/1) due to MQTT spec restrictions.
    Now, a special internal value is used to ensure {allow|deny, all} rules correctly match any topic, including $-prefixed ones.

  • #15844 Added validation to forbid adding empty usernames to the built-in database authenticator. Such users cannot be deleted via the HTTP API later, since they mess up the API path.

    If you have such an user and wish to delete it, run the following in an EMQX console:

    mria:transaction(emqx_authn_shard, fun() -> mnesia:delete(emqx_authn_mnesia, {'mqtt:global',<<>>}, write) end).
  • #15899 Improved memory management by ensuring that the authorization (authz) cache is cleared immediately when a client disconnects, reducing unnecessary memory consumption.

  • #16081 Fixed an issue where clients using extended authentication and memory-based sessions could crash with a session_stepdown_request_exception caused by a calling_self error.

    Example error log
    2025-09-24T07:13:08.973954+08:00 [error] clientid: someclientid, msg: session_stepdown_request_exception, peername: 127.0.0.1:41782, username: admin, error: exit, reason: calling_self, stacktrace: [{gen_server,call,3,[{file,"gen_server.erl"},{line,1222}]},{emqx_cm,request_stepdown,4,[{file,"emqx_cm.erl"},{line,427}]},{emqx_cm,do_takeover_begin,2,[{file,"emqx_cm.erl"},{line,398}]},{emqx_cm,takeover_session,2,[{file,"emqx_cm.erl"},{line,384}]},{emqx_cm,takeover_session_begin,2,[{file,"emqx_cm.erl"},{line,305}]},{emqx_session_mem,open,4,[{file,"emqx_session_mem.erl"},{line,210}]},{emqx_session,open,3,[{file,"emqx_session.erl"},{line,263}]},{emqx_cm,'-open_session/4-fun-1-',4,[{file,"emqx_cm.erl"},{line,290}]},{emqx_cm_locker,trans,2,[{file,"emqx_cm_locker.erl"},{line,32}]},{emqx_channel,post_process_connect,2,[{file,"emqx_channel.erl"},{line,575}]},{emqx_connection,with_channel,3,[{file,"emqx_connection.erl"},{line,852}]},{emqx_connection,process_msg,2,[{file,"emqx_connection.erl"},{line,470}]},{emqx_connection,process_msgs,2,[{file,"emqx_connection.erl"},{line,462}]},{emqx_connection,handle_recv,3,[{file,"emqx_connection.erl"},{line,406}]},{proc_lib,wake_up,3,[{file,"proc_lib.erl"},{line,340}]}], action: {takeover,'begin'}, ...
    

Data Integration

  • #15616 Kafka connections are now considered healthy even if a topic_authorization_failed error is returned for the default probing topic.

  • #15826 Improved Kafka consumer connector health check behavior with restricted ACLs. Previously, Kafka Consumer Connector health checks could fail if the configured user lacked permission to access the internal ____emqx_consumer_probe consumer group used for the check. Wi...

Read more

EMQX Enterprise 6.0.1

11 Nov 09:46
@id id

Choose a tag to compare

Enhancements

Message Queue

  • #16080 Added a configuration option to disable the Message Queues feature. Disabling Message Queues can slightly reduce the resource usage in the cluster. When Durable Sessions are also disabled, EMQX avoids maintaining Durable Storage, further reducing administrative overhead and improving performance.

  • #16096 Added support for automatic creation of message queues when clients subscribe to non-existent $q/ topics. Now configuration options are available to enable auto-creation for both regular and last-value semantics queues.

  • #16097 Optimized message writing to regular message queues by replacing transactional appends with dirty append functions. For QoS 0 messages, asynchronous append operations are now used. These changes significantly improve the performance of message insertion into regular queues.

  • #16098 Added a maximum queue count configuration option to limit the total number of message queues in the system.

  • #16152 Introduced per-queue limits for maximum message count and total message size. Also added new metrics to monitor message append latency and help diagnose performance or queue-limiting issues.

Data Integration

  • #16121 Upgraded the GreptimeDB ingester client to v0.2.3, which fixes several bugs and introduces support for row-based gRPC protocol (the column-based protocol is now deprecated).

    Additionally, updated the CI image to the latest stable version of GreptimeDB.

  • #16127 Fixed an invalid string value issue in the GreptimeDB connector, following the changes introduced in #16121.

Performance

  • #15949 Changed the default value of the parse_unit option in listener configuration from chunk to frame. This change can significantly reduce CPU usage when the payload size exceeds the socket buffer (default is 4 KB).

    Note: With parse_unit = frame, if a PUBLISH packet exceeds the maximum allowed size, EMQX will close the connection instead of sending a DISCONNECT packet.

  • #16165 Optimized the performance of the GET /clients_v2 API. Previously, when the cluster had around 50,000 clients or more, API calls to retrieve the client list could be extremely slow or even time out.

Bug Fixes

Core MQTT Functionalities

  • #15884 Resolve an issue where, in rare cases, the global routing table could indefinitely retain routing information for nodes that had long left the cluster.

  • #15518 Resolved a race condition that may lead to accumulating inconsistencies in the routing table and shared subscriptions state in the cluster when a large number of shared subscribers disconnect simultaneously.

Upgrade

  • #16047 Added support to perform rolling upgrade from EMQX Enterprise base version 5.8.0 and newer to 6.0. During the upgrade, legacy configurations are automatically migrated to the new format supported in 6.0. Specifically, the deprecated bridges configuration root is converted into the new connectors, sources, and actions roots.

    However, the GCP PubSub Consumer and Kafka Consumer sources will still require manual changes. If any source configuration still includes the deprecated topic_mapping field, it must be removed. Then, for each entry previously defined in topic_mapping, a separate "Source + Rule" pair must be created manually.

Security

  • #16156 Fixed an issue where some dependencies were missing default configurations compared to EMQX 5.10, potentially causing RSA signature verification failures. The missing defaults could lead to errors, such as the following log message:

    {sign_unsupported,[[{rsa_padding,rsa_pkcs1_padding}]]}, [{jose_jwa_unsupported,verify,5,[{file,"src/jwa/jose_jwa_unsupported.erl"},{line,55}]}
    
  • #16175 Fixed an issue with periodic TLS certificate garbage collection. Previously, the garbage collection process incorrectly deleted certificate files that were actively used by configurations in managed namespaces.

Access Control

  • #16081 Fixed an issue where clients using extended authentication and memory-based sessions could crash with a session_stepdown_request_exception caused by a calling_self error.

    Example error log
    2025-09-24T07:13:08.973954+08:00 [error] clientid: someclientid, msg: session_stepdown_request_exception, peername: 127.0.0.1:41782, username: admin, error: exit, reason: calling_self, stacktrace: [{gen_server,call,3,[{file,"gen_server.erl"},{line,1222}]},{emqx_cm,request_stepdown,4,[{file,"emqx_cm.erl"},{line,427}]},{emqx_cm,do_takeover_begin,2,[{file,"emqx_cm.erl"},{line,398}]},{emqx_cm,takeover_session,2,[{file,"emqx_cm.erl"},{line,384}]},{emqx_cm,takeover_session_begin,2,[{file,"emqx_cm.erl"},{line,305}]},{emqx_session_mem,open,4,[{file,"emqx_session_mem.erl"},{line,210}]},{emqx_session,open,3,[{file,"emqx_session.erl"},{line,263}]},{emqx_cm,'-open_session/4-fun-1-',4,[{file,"emqx_cm.erl"},{line,290}]},{emqx_cm_locker,trans,2,[{file,"emqx_cm_locker.erl"},{line,32}]},{emqx_channel,post_process_connect,2,[{file,"emqx_channel.erl"},{line,575}]},{emqx_connection,with_channel,3,[{file,"emqx_connection.erl"},{line,852}]},{emqx_connection,process_msg,2,[{file,"emqx_connection.erl"},{line,470}]},{emqx_connection,process_msgs,2,[{file,"emqx_connection.erl"},{line,462}]},{emqx_connection,handle_recv,3,[{file,"emqx_connection.erl"},{line,406}]},{proc_lib,wake_up,3,[{file,"proc_lib.erl"},{line,340}]}], action: {takeover,'begin'}, ...
    

Clustering

  • #16123 Fix a bug in the component managing Mria replication that could cause cluster joins to hang or remain incomplete in core-replicant clusters.

    During cluster changes involving adding new core nodes, those new core nodes could sometimes fail to start replication-related processes required by replicants. As a result, upgraded or newly added replicants could hang during startup.

    In Kubernetes deployments, this often caused readiness probes to fail, leading the controller to repeatedly restart the affected replicant pods.

    This issue typically affected upgrade rollouts involving the addition of new core and replicant nodes. For example, adding two cores and two replicants (running a newer EMQX version) to an existing cluster with 2 cores and 2 replicants.

Rule Engine

  • #16028 Fixed rule engine jq function memory leak.

    Previously if jq built-in function index is used (e.g. .key | index("name")), it would result in memory leak.

Data Integration

  • #16010 Fixed an issue where a Republish Fallback Action could fail with a function_clause error if the originating rule's SQL did not include the metadata field from the rule environment.

    Example error log:

    [error] tag: RESOURCE, msg: failed_to_trigger_fallback_action, reason: {error,function_clause}, fallback_kind: republish, primary_action_resource_id: <<"action:type:name:connector:type:name">>, republish_topic: <<"republish/topic">>
    
  • #16046 Fixed a potential out-of-memory (OOM) crash when loading or restarting a configuration containing a Connector with several hundred Actions.

  • #16140 Fix a Redis cluster failover issue that could cause the Connector to remain stuck in a "connecting" state.

    Previously, EMQX’s Redis cluster client only refreshed the cluster topology when regular queries (such as GET) failed. However, failures in periodic PING commands did not trigger a refresh. As a result, after a failover, the connector could continue using the outdated cluster topology if no other commands were issued, preventing recovery.

    With this fix, failed PING responses now trigger a cluster topology refresh, ensuring that the connector can detect failovers and recover promptly.

MQTT Durable Sessions

  • #16105 Durable storage performance optimization. In particular, this fix reduces the latency of CONNACK for clients using a durable session.

  • #16129 Durable storage transaction configuration can be changed in the runtime. Previously changing this configuration required a node restart.

Observability

  • #15963 Reduced excessive audit log entries generated during looped evaluations in the remote shell (remsh).

  • #15967 Fixed an issue where Mnesia transaction blocking during the cleanup of large volumes of audit logs could lead to rapid memory growth.

  • #16060 Fixed a logger formatter crash that could occur for some debug-level log messages containing deeply nested terms with non-ASCII characters.

    Example error log
    2025-09-29T06:55:34.120640+00:00 debug: FORMATTER CRASH: {report,#{request => #{messages => [#{role => <<"user">>,content => <<"{\"msg\": \"hello\"}">>}],sy...
    
Read more

EMQX Enterprise 5.10.2

11 Nov 09:32
@id id

Choose a tag to compare

Enhancements

Data Integration

  • #16183 EMQX now logs messages about dropped expired messages (buffer_worker_dropped_expired_messages ) at the warning level, and throttles such messages per resource ID. This helps identify when specific external resources are not keeping up with incoming message rates, potentially leading to message drops.

  • #16206 Added the allow_auto_topic_creation configuration option to the Kafka Producer Connector. When enabled, EMQX allows Kafka to automatically create a topic if it doesn’t exist when a client sends a metadata fetch request.

  • #16209 Added support for specifying a custom timestamp column name (ts_column) parameter to GreptimeDB Connector.

Performance

  • #15949 Changed the default value of the parse_unit option in listener configuration from chunk to frame. This change can significantly reduce CPU usage when the payload size exceeds the socket buffer (default is 4 KB).

    Note: With parse_unit = frame, if a PUBLISH packet exceeds the maximum allowed size, EMQX will close the connection instead of sending a DISCONNECT packet.

  • #16165 Optimized the performance of the GET /clients_v2 API. Previously, when the cluster had around 50,000 clients or more, API calls to retrieve the client list could be extremely slow or even time out.

Bug Fixes

Core MQTT Functionalities

  • #15884 Resolve an issue where, in rare cases, the global routing table could indefinitely retain routing information for nodes that had long left the cluster.

  • #15518 Resolved a race condition that may lead to accumulating inconsistencies in the routing table and shared subscriptions state in the cluster when a large number of shared subscribers disconnect simultaneously.

Access Control

  • #16081 Fixed an issue where clients using extended authentication and memory-based sessions could crash with a session_stepdown_request_exception caused by a calling_self error.

    Example error log
    2025-09-24T07:13:08.973954+08:00 [error] clientid: someclientid, msg: session_stepdown_request_exception, peername: 127.0.0.1:41782, username: admin, error: exit, reason: calling_self, stacktrace: [{gen_server,call,3,[{file,"gen_server.erl"},{line,1222}]},{emqx_cm,request_stepdown,4,[{file,"emqx_cm.erl"},{line,427}]},{emqx_cm,do_takeover_begin,2,[{file,"emqx_cm.erl"},{line,398}]},{emqx_cm,takeover_session,2,[{file,"emqx_cm.erl"},{line,384}]},{emqx_cm,takeover_session_begin,2,[{file,"emqx_cm.erl"},{line,305}]},{emqx_session_mem,open,4,[{file,"emqx_session_mem.erl"},{line,210}]},{emqx_session,open,3,[{file,"emqx_session.erl"},{line,263}]},{emqx_cm,'-open_session/4-fun-1-',4,[{file,"emqx_cm.erl"},{line,290}]},{emqx_cm_locker,trans,2,[{file,"emqx_cm_locker.erl"},{line,32}]},{emqx_channel,post_process_connect,2,[{file,"emqx_channel.erl"},{line,575}]},{emqx_connection,with_channel,3,[{file,"emqx_connection.erl"},{line,852}]},{emqx_connection,process_msg,2,[{file,"emqx_connection.erl"},{line,470}]},{emqx_connection,process_msgs,2,[{file,"emqx_connection.erl"},{line,462}]},{emqx_connection,handle_recv,3,[{file,"emqx_connection.erl"},{line,406}]},{proc_lib,wake_up,3,[{file,"proc_lib.erl"},{line,340}]}], action: {takeover,'begin'}, ...
    

Rule Engine

  • #16028 Fixed rule engine jq function memory leak.

    Previously if jq built-in function index is used (e.g. .key | index("name")), it would result in memory leak.

Data Integration

  • #16010 Fixed an issue where a Republish Fallback Action could fail with a function_clause error if the originating rule's SQL did not include the metadata field from the rule environment.

    Example error log:

    [error] tag: RESOURCE, msg: failed_to_trigger_fallback_action, reason: {error,function_clause}, fallback_kind: republish, primary_action_resource_id: <<"action:type:name:connector:type:name">>, republish_topic: <<"republish/topic">>
    
  • #16043 Improved log details for Kafka data integration when not_all_kafka_partitions_connected event occurs.

  • #16046 Fixed a potential out-of-memory (OOM) crash when loading or restarting a configuration containing a Connector with several hundred Actions.

  • #16138 Fix a Redis cluster failover issue that could cause the Connector to remain stuck in a "connecting" state.

    Previously, EMQX’s Redis cluster client only refreshed the cluster topology when regular queries (such as GET) failed. However, failures in periodic PING commands did not trigger a 6880 refresh. As a result, after a failover, the connector could continue using the outdated cluster topology if no other commands were issued, preventing recovery.

    With this fix, failed PING responses now trigger a cluster topology refresh, ensuring that the connector can detect failovers and recover promptly.

  • #16212 Removed Kafka producer linger time when the buffer queue is in memory mode.

Observability

  • #15963 Reduced excessive audit log entries generated during looped evaluations in the remote shell (remsh).

  • #15967 Fixed an issue where Mnesia transaction blocking during the cleanup of large volumes of audit logs could lead to rapid memory growth.

Breaking Changes

  • #16062 Fixed an issue where RocketMQ actions ignored the configured payload template and sent the entire rule output instead.

    If you relied on the previous (incorrect) behavior, you may need to update your payload templates to ensure messages are formatted as expected.

EMQX Enterprise 6.0.0

30 Sep 12:04
@id id

Choose a tag to compare

Feature Highlights

EMQX Enterprise 6.0.0 is the first release of the EMQX Enterprise version 6 series, bringing significant architectural improvements and new capabilities.

Message Queue

The native Message Queue feature unifies real-time MQTT publish/subscribe with persistent asynchronous queuing. The server buffers messages that match a topic filter, retaining them even when subscribers are offline. Clients can consume these messages through the special $q/{topic} topic, ensuring reliable message delivery.

Message Queues support offline message storage, last-value retention, and flexible dispatch strategies, enhancing MQTT with both real-time and durable messaging capabilities.

Namespace

The Namespace feature improves multi-tenancy and observability with namespace-level roles in the Dashboard. Users are restricted to their own resources (e.g., Rules, Actions, and Connectors) with fine-grained permissions such as Administrator or Viewer, and roles can be managed via the Dashboard, API, or CLI, simplifying multi-tenant operations.

Session count tracking has also been optimized: counts refresh on demand when there are fewer than 1,000 connections, and every 5 seconds otherwise. During rolling upgrades from older versions, counts may temporarily appear inconsistent, but will stabilize once all nodes are updated.

MQTT Durable Sessions

Durable storage has been optimized by separating session data from the broker’s other metadata, significantly reducing RAM usage and improving storage efficiency.

New configuration options provide finer control over RocksDB memory usage and performance. In addition, the default serialization schema for stored messages has been updated to ASN.1, further enhancing efficiency.

New Data Integrations

  • Google BigQuery
  • AWS AlloyDB
  • CockroachDB
  • AWS Redshift

Enhanced Integration

  • AWS:

    • Support for Instance Metadata Service v2 APIs from EC2 instances when using S3 or S3Tables data integration. This enables seamless access to S3 buckets without manual AWS credential configuration, leveraging IAM roles for better security.
    • Parquet format support for S3 Tables Action.
  • RabbitMQ: Define custom Headers and Properties Templates in RabbitMQ Sink to enhance message routing and compatibility within RabbitMQ.

  • Snowflake: Snowpipe Streaming upload mode for Snowflake Action (preview feature).

  • RocketMQ: New key and tag template fields in Action, along with a key_dispatch option for the Produce Strategy, allowing greater customization of message metadata.

Elixir Support

All packages now ship with Elixir support through the Mix build system, opening EMQX to the Elixir community and enabling better tooling with IEx console.

Enhanced LDAP Support

LDAP authorization now supports extended ACL rules in JSON format, and LDAP authentication can fetch ACL rules directly from LDAP with client-side caching.

Improved Tracing

Configurable limits for maximum traces (trace.max_traces) and trace file sizes (trace.max_file_size).
After max_file_size is reached, the trace log will rotate to a new file instead of halting.

Cluster Management

New cluster.description configuration option allows users to set and display custom cluster descriptions in the EMQX Dashboard.

Enhancements

Message Queue

  • #15789 Implemented Message Queues, which are collections of messages identified by topic_filter. Each queue has an explicit lifecycle and is automatically replenished with published messages matched with the queue's topic filter during the queue's lifetime. Clients can cooperatively consume messages from a queue by subscribing to a special topic in the format: $q/{topic}.

Core MQTT Functionalities

  • #15805 Introduced a dedicated worker pool for handling sharded fanout message delivery.
    Previously, the broker pool handled both subscription management and message dispatch, which could lead to scheduling contention. This change separates the fanout dispatch workload into its own pool to ensure more balanced and efficient handling of pub/sub operations.

Access Control

  • #15349 Optimize external resource management for authentication and authorization. Previously, EMQX could remain connected to a resource configured for a disabled authenticator or authorizer.

  • #15294 Enhanced LDAP authentication and authorization. LDAP authorization now supports extended ACL rules in JSON format. LDAP authentication can now fetch ACL rules from LDAP. These rules are cached in the client's metadata, so authorization is performed without additional LDAP queries.

  • #15730 Added support for overriding the client ID based on authentication results. If an authentication backend returns a clientid_override attribute upon successful authentication, it will replace the client’s original client ID.

    The following backends now support clientid_override:

    • HTTP
    • JWT
    • LDAP
    • MongoDB
    • MySQL
    • Postgres
    • Redis
  • #15820 Changed default value of config authorization.no_match from allow to deny for better security defaults.

Clustering

  • #15600 Introduced a new configuration option cluster.description that allows you to add a descriptive label to the EMQX cluster. This description can be updated via PUT /cluster, and retrieved with the GET /cluster API.

LLM-Based MQTT Data Processing

  • #15467 Exposed transport configuration options for AI Completion Providers. Users can now configure connection timeouts and the maximum number of connections to AI Completion Providers. This helps prevent checkout_timeout errors when message throughp 10BC0 ut is high and the provider is under load.

  • Flow designer supports integrating with the Google Gemini model.

  • #15631 Added a new API endpoint to list all models available for an AI provider.

  • #15467 Exposed transport options for AI Completion Providers. These options allow configuring connection timeouts and maximum connections to an AI Completion Provider.

  • #15724 Introduced openai_response type for AI Completion Providers and completion profiles to use OpenAI's response API.

Data Integration

  • #15418 EMQX supports data integration with BigQuery.

  • #15401 Added support for the Snowpipe Streaming upload mode in the Snowflake Action.
    Note: Snowpipe Streaming is currently a preview feature and is only available for Snowflake accounts hosted on AWS.

  • #15387 Added rate limiting to Kinesis Producer Connector and Action health checks to comply with AWS API quotas and improve cluster behavior.

    • Health check calls to ListStreams and DescribeStream are now limited to 5/s and 10/s per Connector, respectively, matching AWS rate limits.
    • A distributed limiter is coordinated by a core node in the cluster to enforce these limits consistently.
    • If a health check is throttled or times out, the Connector or Action will now retain its previous status instead of being marked as disconnected.

    Also introduced a new resource_opts.health_check_interval_jitter, which adds a uniform random delay to resource_opts.health_check_interval to reduce the chance of multiple Actions under the same Connector running health checks at the same time.

  • #15176 Upgraded the GreptimeDB Connector client and supported an optional new parameter ttl to set the default time-to-live for automatically created tables.

  • #15649 EMQX supports data integration with AWS AlloyDB, CockroachDB, and AWS Redshift.

  • #15635 Added new key and tag template fields in the RocketMQ Action, allowing customization of the message's key and tag. Also, introduced a new key_dispatch option for the Produce Strategy field.

  • #15621 Now, access_key_id and secret_access_key are optional fields for the S3 Tables Connector. If omitted, they'll be obtained from the Instance Metadata Service v2 APIs from the EC2 instance where EMQX is deployed.

  • #15628 Removed HStreamDB data integration.

  • #15544 Added Arrow Flight SQL NIF driver support for Datalayers Integration.

  • #15637 Added support for templating message headers and properties for the RabbitMQ Action.

  • #15864 Removed the deprecated "Bridges V1" APIs and configuration schemas. All endpoints under /bridges/* and configuration entries under the bridges root key are no longer available, as data integrations have fully migrated to the "Connectors/Actions/Sources" model.

  • #15583 Updated the brod client to version 4.4.4, expanding support for a wider range of Kafka APIs. This update addresses the deprecation of JoinGroups API versions v0 - v1.

Smart Data Hub

  • #15525 Prevented deletion of internal sch...
Read more

EMQX Enterprise 5.10.1

18 Sep 16:43
@id id
e05b35c

Choose a tag to compare

Enhancements

Performance

  • #15907 Improve system memory usage. Fields such as client ID, username, password, and topic are copied into new binaries (when more than 64 bytes) instead of being slices from the raw packet to reduce 'binary' part of memory usage in Erlang VM.

  • #15899 Authorization (authz) cache is now cleared immediately when a client disconnects, reducing unnecessary memory consumption.

Observability

  • #15499 Added a force deactivate alarm API endpoint to allow administrators to forcibly deactivate active alarms.

  • #15364 Added HTTP header configuration items to the OpenTelemetry integration to adapt to collectors with HTTP authentication.

Access Control

  • #15294 Enhanced LDAP authentication and authorization.
    LDAP authorization now supports an extended ACL rule format using JSON, in addition to the existing simple topic list. ACL rules can also be fetched from LDAP during authentication based on client information, and are cached in the client’s metadata to avoid repeated LDAP queries during authorization.

  • #15349 Optimized external resource management for authentication and authorization. Previously, EMQX could remain connected to a resource configured for a disabled authentication or authorization provider.

Data Integration

  • #15360 Added support for writing data files in Parquet format for Amazon S3 Tables Action.

  • #15387 Added rate limiting to Kinesis Producer Connector and Action health checks to comply with AWS API quotas and improve cluster behavior.

    • Health check calls to ListStreams and DescribeStream are now limited to 5/s and 10/s per Connector, respectively, matching AWS rate limits.
    • A distributed limiter is coordinated by a core node in the cluster to enforce these limits consistently.
    • If a health check is throttled or times out, the Connector or Action will now retain its previous status instead of being marked as disconnected.

    Also introduced a new resource_opts.health_check_interval_jitter, which adds a uniform random delay to resource_opts.health_check_interval to reduce the chance of multiple Actions under the same Connector running health checks at the same time.

  • #15542 Upgraded our erlcloud library to 3.8.3.0. This allows one to setup a S3 Connector without specifying Access Key Id and Secret Access Key, so long as the EC2 instance EMQX is running in has the correct IAM permissions to read/write to the configured bucket(s).

  • #15845 The static_clientids configuration for the MQTT Connector now supports specifying a username and password for each client ID. This is particularly useful for scenarios like connecting to Azure IoT Hub, where each device (client ID) requires a unique set of credentials. This enhancement helps ensure successful connections across multiple nodes in a clustered environment.

  • #15944 Improved the information returned when a resource is marked as disconnected for the following Connectors: LDAP, Syskeeper, IoTDB, Snowflake (aggregated), JWKS Authentication.

  • #15911 Now, for the HTTP Action, the HTTP request timeout is taken to be the same as resource_opts.request_ttl. Previously, it was a fixed, non-configurable value of 30 seconds.

  • #15371 Added tags fields to the return of GET /actions_summary and GET /sources_summary, and to the fallback actions returned in GET /actions/:id.

CLI

  • #15399 The node_dump tool now exports the current system configuration in HOCON format, with sensitive information (such as passwords and secrets) automatically redacted for security.

Bug Fixes

API

  • #15547 Resolved an issue where EMQX would fail to process HTTP requests with large bodies (e.g., 10MB) in the REST API.

  • #15797 To improve compatibility with EMQX 4.x, the encoding parameter has been reintroduced in the batch publish HTTP API (/api/v5/publish/bulk) as an alias for payload_encoding. This change addresses migration issues for users relying on the original encoding parameter, and ensures existing integrations using EMQX v4 APIs can continue working without requiring software-level changes.

Observability

  • #15785 Resolved a crash that occurred when MQTT usernames containing non-ASCII characters were used in formatting network congestion alarm messages.

Gateway

  • #15342 Fixed a crash in the NATS gateway caused by client info override templates referencing undefined packet fields. The system now returns an empty binary instead of undefined atom.

Core MQTT Functions

  • #15361 Fixed a function_clause error when parsing a malformed User-Property pair with invalid (too short) length.

  • #15396 Removed redundant cleanup operations for shared subscriptions of disconnected clients. These operations were prone to crashes under high disconnect volumes and could lead to inconsistencies in the global broker state.

  • #15416 Fixed occasional warning-level log events and crashes during session expiration of WebSocket connections. This issue was introduced by recent WebSocket performance improvements. If did not affect broker capacity, but produced log entries like the following:

    • error: {function_clause,[{gen_tcp,send,[closed,[]],[{file,“gen_tcp.erl”},{line,966}]},{cowboy_websocket_linger,commands,3,[{file,“cowboy_websocket_linger.erl”},{line,665}]},...
    • message: {tcp,#Port<0.364>,<<136,130,...>>}, msg: emqx_session_mem_unknown_message
  • #15872 Eliminated warning log unclean_terminate when disconnected after CONNACK is sent with a non-zero reason code.

  • #15518 Resolve a race condition that may lead to accumulating inconsistencies in the routing table and shared subscriptions state in the cluster when a large number of shared subscribers disconnect simultaneously.

Data Integration

  • #15394 Fixed a rare race condition where Action metrics could become inconsistent due to unexpected asynchronous replies.

  • #15603 Fixed an issue in the MQTT bridge where a stale connection could be shown as Connected and would not automatically reconnect.

  • #15826 Improved Kafka consumer connector health check behavior with restricted ACLs. Previously, Kafka Consumer Connector health checks could fail if the configured user lacked permission to access the internal ____emqx_consumer_probe consumer group used for the check. With this fix, if the Kafka broker returns an "ACL denied" response, EMQX will treat the connection as healthy.

  • #15827 Fixed atom and process leaks in the GreptimeDB driver.

    Fixed a function_clause error that could arise if certain incorrect write syntaxes were used in GreptimeDB Actions.

  • #15836 Enriched the returned information when a Kafka Consumer Source fails to be added, for example, due to denied topic ACLs.

  • #15850 Fixed an issue with the MQTT bridge when a stale connection was displayed as Connected and the connection was not re-established.

  • #15866 Upgrade Kafka producer lib wollf to 4.0.12 to improve handling of temporarily missing partitions in Kafka metadata responses.

    In rare race conditions, Kafka may return an incomplete partition list.
    Previously, this was only handled when a topic was recreated with fewer partitions, but not when partitions were temporarily missing.
    This gap could cause the partition producer to stall and block shutdown indefinitely.

  • #15906 Upgraded Kafka producer library Wolff from 4.0.12 to 4.0.13, which adds handling for the record_list_too_large error in ProduceResponse.

  • #15902 Upgrade MQTT client library to 1.13.8

    This improves MQTT bridge connectivity with:

    • Connector will automatically reconnect when peer broker does not reply PINGRESP.
    • Bridge over TLS failure is more promptly handled if connection breaks while waiting for CONNACK.
  • #15910 Fixed an issue with Connectors where a pool of workers could fail to recover from a failure if multiple workers crashed simultaneously in large worker pools.

    Connectors affected and fixed:

    • MySQL
    • PostgreSQL
    • Oracle
    • SQLServer
    • TDEngine
    • Cassandra
    • Dynamo
    • HTTP
    • Couchbase
    • GCP PubSub
    • Snowflake

    Upgraded gun and related dependencies to 2.1.0.

Deployment

  • #15553 Fixed an issue in the Helm chart where deploying EMQX with default values started multiple replicas and caused all nodes except one to crash. The chart now defaults to a single replica, since clustered deployments require an Commerc...
Read more

EMQX v5.8.8

04 Sep 08:35
@id id
e1bbd8d

Choose a tag to compare

Enhancements

Deployment

  • #15813 Added package release for Debian 13 (Trixie), and updated Docker images to use Debian 13 as the base.

Core MQTT Functionalities

  • #15773 Throttled client ID registration during reconnects.
    • When a previous session cleanup is still in progress, new connections using the same client ID are now throttled. This prevents instability when clients reconnect aggressively.
    • Affected clients receive reason code 137 (Server Busy) in the CONNACK with Reason-String "THROTTLED", and should retry after the cleanup completes.
    • Fixed the reason code returned when another connection registers the same client ID; now correctly returns 137 instead of 133.

Observability

  • #15499 Added a force deactivate alarm API endpoint to allow administrators to forcibly deactivate active alarms.

Performance

  • #15536 Disabled the node.global_gc_interval configuration by default to improve overall performance stability, as it caused CPU fluctuations and higher message latency while providing little benefit over Erlang’s built-in garbage collector.
  • #15539 Optimized Erlang VM parameters to improve performance and stability:
    • Increased buffer size for distributed channels to 32 MB (+zdbbl 32768) to prevent busy_dist_port alarms during intensive Mnesia operations.
    • Disabled scheduler busy-waiting (+sbwt none +sbwtdcpu none +sbwtdio none) to lower CPU usage reported by the operating system.
    • Set scheduler binding type to db (+stbt db) to reduce message latency.

Bug Fixes

Deployment

  • #15580 Added a new emqxLicenseSecretRef variable to the EMQX Enterprise Helm chart. This allows users to specify a Kubernetes Secret containing the EMQX license key, so the license is applied automatically.

    This replaces the non-functional emqxLicenseSecretName variable, which created and mounted a secret file but did not pass the license to EMQX.

Clustering

  • #14778 Fixed an issue where a node could not join a running cluster if that node had broken symlinks in its data/certs or data/authz directories.

Security

  • #15581 Upgraded Erlang/OTP version from 26.2.5.2 to 26.2.5.14. This upgrade includes two TLS-related fixes from OTP that affect EMQX:
    • Fixed a crash in TLS connections caused by a race condition during certificate renewal.
    • Added support for RSA certificates signed with RSASSA-PSS parameters. Previously, such certificates could cause TLS handshakes to fail with a bad_certificate / invalid_signature error.

Observability

  • #15639 Fixed an issue where the packets.subscribe.auth_error metric was not incremented when subscription authentication failed.

Gateway

  • #15679 Fixed incorrect global chain names for the ExProto gateways. Built-in authentication data for these gateways was previously grouped under unknown:global, causing conflicts between gateways.
  • #15699 Fixed an issue where built-in authentication data for gateways (e.g., CoAP) was incorrectly removed when a node was stopped or restarted.

ExHook

  • #15683 Fixed ExHook TLS options so that gRPC clients can correctly verify the server hostname during the TLS handshake.

EMQX Enterprise 5.8.8

04 Sep 08:12
@id id
e1bbd8d

Choose a tag to compare

Enhancements

Deployment

  • #15813 Added package release for Debian 13 (Trixie), and updated Docker images to use Debian 13 as the base.

Core MQTT Functionalities

  • #15773 Throttled client ID registration during reconnects.
    • When a previous session cleanup is still in progress, new connections using the same client ID are now throttled. This prevents instability when clients reconnect aggressively.
    • Affected clients receive reason code 137 (Server Busy) in the CONNACK with Reason-String "THROTTLED", and should retry after the cleanup completes.
    • Fixed the reason code returned when another connection registers the same client ID; now correctly returns 137 instead of 133.

Data Integration

  • #15542 Upgraded our erlcloud library to 3.8.3.0. This allows users to set up an S3 Connector without specifying Access Key Id and Secret Access Key, so long as the EC2 instance EMQX is running in has the correct IAM permissions to read/write to the configured bucket(s).
  • #15585 Updated the brod client to version 4.4.4, expanding support for a wider range of Kafka APIs. This update addresses the deprecation of JoinGroups API versions v0 - v1.

Observability

  • #15499 Added a force deactivate alarm API endpoint to allow administrators to forcibly deactivate active alarms.

Performance

  • #15536 Disabled the node.global_gc_interval configuration by default to improve overall performance stability, as it caused CPU fluctuations and higher message latency while providing little benefit over Erlang’s built-in garbage collector.
  • #15539 Optimized Erlang VM parameters to improve performance and stability:
    • Increased buffer size for distributed channels to 32 MB (+zdbbl 32768) to prevent busy_dist_port alarms during intensive Mnesia operations.
    • Disabled scheduler busy-waiting (+sbwt none +sbwtdcpu none +sbwtdio none) to lower CPU usage reported by the operating system.
    • Set scheduler binding type to db (+stbt db) to reduce message latency.

Bug Fixes

Deployment

  • #15580 Added a new emqxLicenseSecretRef variable to the EMQX Enterprise Helm chart. This allows users to specify a Kubernetes Secret containing the EMQX license key, so the license is applied automatically.

    This replaces the non-functional emqxLicenseSecretName variable, which created and mounted a secret file but did not pass the license to EMQX.

Clustering

  • #14778 Fixed an issue where a node could not join a running cluster if that node had broken symlinks in its data/certs or data/authz directories.

Security

  • #15581 Upgraded Erlang/OTP version from 26.2.5.2 to 26.2.5.14. This upgrade includes two TLS-related fixes from OTP that affect EMQX:
    • Fixed a crash in TLS connections caused by a race condition during certificate renewal.
    • Added support for RSA certificates signed with RSASSA-PSS parameters. Previously, such certificates could cause TLS handshakes to fail with a bad_certificate / invalid_signature error.

Data Integration

  • #15616 Kafka connections are now considered healthy even if a topic_authorization_failed error is returned for the default probing topic.

Smart Data Hub

  • #15706 Fixed an indexing issue that could cause Message Transformations and Schema Validations to behave inconsistently. Deleting one item could corrupt the topic index, so that a subsequent item remained active even after being disabled.
  • #15708 Fixed an issue where external schema registries were not reloaded after a node restart.

Observability

  • #15639 Fixed an issue where the packets.subscribe.auth_error metric was not incremented when subscription authentication failed.

Gateway

  • #15679 Fixed incorrect global chain names for the ExProto, JT/T 808, GB/T 32960, and OCPP gateways. Built-in authentication data for these gateways was previously grouped under unknown:global, causing conflicts between gateways.
  • #15699 Fixed an issue where built-in authentication data for gateways (e.g., CoAP) was incorrectly removed when a node was stopped or restarted.
  • #15822 Fixed an issue where the OCPP connection would crash after sending a certain number of messages.

ExHook

  • #15683 Fixed ExHook TLS options so that gRPC clients can correctly verify the server hostname during the TLS handshake.

EMQX e6.0.0-M2.202508

21 Aug 08:53
d76d02d

Choose a tag to compare

EMQX e6.0.0-M2.202508 Pre-release
Pre-release

Enhancements

  • #15628 Remove HStreamDB data integration.

  • #15463 Durable storage RAM usage and storage efficiency optimizations.

    1. Added the following configuration parameters for the durable storage:
    • durable_storage.messages.rocksdb.write_buffer_size: RocksDB memtable size per shard.
    • durable_storage.messages.rocksdb.cache_size: RocksDB block size per shard.
    • durable_storage.messages.rocksdb.max_open_files: Limits the number of file descriptors used by RocksDB per shard.
    • durable_storage.messages.layout.wildcard_thresholds: Allows to tune wildcard thresholds for the wildcard_optimized_v2 storage layout
    1. The default serialization_schema for the messages has been changed to asn1.
  • #15484 Changed our build system so that all packages are build with Elixir's Mix. This opens up EMQX to Elixir community and allows us to use Elixir dependencies when required, besides enabling use of IEx as a better EMQX console.

  • #15525 Now, when attempting to remove an Internal Schema which is being referenced by either a Schema Validation or a Message Transformation, the removal will be denied.

  • #15542 Upgraded our erlcoud library to 3.8.3.0. This allows one to setup a S3 Connector without speci 2D7B fying Access Key Id and Secret Access Key, so long as the EC2 instance EMQX is running in has the correct IAM permissions to read/write to the configured bucket(s).

  • #15544 Add Arrow Flight SQL NIF driver support for Datalayers Integration.

  • #15556 Exposed maximum trace file size limit per each individual trace as a configuraion option trace.max_file_size.

  • #15583 Updated our brod client to version 4.4.4. This expands the supported Kafka API ranges, in particular due to the JoinGroups API v0and v1 being deprecated.

  • #15594 Exposed maximum number of traces allowed to exist in the cluster simultaneously as a configuration option trace.max_traces. This limit does not apply to node-local traces managed through emqx ctl trace.

    Optimized tracing implementation to eliminate potential atom leaks per created trace.

  • #15600 Added a new cluster.description configuration that allows one to add a description to the EMQX cluster. This description can be changed via PUT /cluster, and viewed in the GET /cluster response.

  • #15621 Now, access_key_id and secret_access_key are optional fields for the S3Tables Connector. If omitted, they'll be obtained from the Instance Metadata Service v2 APIs from the EC2 instance where EMQX is deployed.

  • #15631 A new API endpoint is added to list all models available for an AI provider.

  • #15635 Added new key and tag template fields for the RocketMQ Action which sets the message's key and tag, respectively. Also, added a new key_dispatch value for the strategy field.

  • #15649 Added new Connectors and Actions that appends data to AWS AlloyDB, CockroachDB and AWS Redshift.

  • #15724 Introduce openai_response type for AI Completion Providers and completion profiles to use OpenAI's response API.

  • #15536 Disable the node.global_gc_interval configuration by default.

  • #15539 Optimize Erlang VM parameters.

    • Increase the buffer sizes for distributed channels to 32MB to avoid busy_dist_port alarms during intensive Mnesia operations: +zdbbl 32768
    • Disable scheduler busy-waiting to reduce CPU usage observed by the operating system: +sbwt none +sbwtdcpu none +sbwtdio none
    • Set scheduler binding type to db to reduce message latency: +stbt db
  • #15451 Introduce experimental socket backend for TCP listeners, designed to improve message processing latency and reduce compute resource usage. This can be enabled via the new tcp_backend listener option.

Bug Fixes

  • #15383 Fix a potential resource leak in MQTT bridge when the bridge fails to start. Previously, the topic index table was not properly cleaned up when the bridge failed to start.

  • #15547 Fixed error when an HTTP request with a large body is sent.

  • #15489 Fix OIDC issuer scheme validation.

    The previously unsupported issuer URLs listed below are now supported.

    • https://xxxxxxxx:8443/webman/sso/.well-known/openid-configuration
    • hostname
  • #15553 Fixes an issue with helm chart when all nodes except one will be crashing if the chart is deployed with default values.

  • #15569 Fixed an issue where a Republish Rule Action could fail if the template for direct_dispatch was an empty string or resolve to a non-boolean value. Now, if such situations occur, the default value, false, will be used.

  • #15580 Add emqxLicenseSecretRef variable to EMQX Enterprise helm chart, allowing users to specify a Kubernetes secret containing the EMQX license key. This fixes the issue with defunct emqxLicenseSecretName variable.

  • #15603 Fixed an issue with the MQTT bridge when a stale connection was displayed as `Connected' and the connection was not re-established.

  • #15647 Previously, if the user of a MongoDB Connector did not have sufficient privileges to perform find queries in a foo collection, it would be considered disconnected. This has been fixed.

  • #15693 Postgres-based bridges were patched to avoid leaking connection pools. Previously, depending on race conditions when initializing the pool, if one later deleted the Connector, the pool could still be present.

  • #15696 Support connection rate limiting for WebSocket (WS) and WebSocket Secure (WSS) listeners. Listener configuration options max_conn_rate and max_conn_burst are now respected: incoming connections going over specified connection rate are closed immediately after being accepted, mirroring TCP listener behavior.

    The max_connections option for WS/WSS listeners has also slightly changed: connections exceeding the limit are closed immediately after acceptance, before any HTTP protocol exchange. Clients will now see an abrupt socket close instead of HTTP 429.

Breaking Changes

  • #15613 Stopped releasing packages for Debian 10.

  • #15635 We no longer support setting key templates (and thus implicitly specifying key dispatch strategy) in the parameters.strategy field of RocketMQ Action. Instead, users should set parameters.strategy = key_dispatch and specify the template in parameters.key.

EMQX Enterprise 6.0.0-M1.202507

18 Jul 10:02
@id id
9bb274f

Choose a tag to compare

Pre-release

e6.0.0-M1.202507

Enhancements

  • #15176 Upgrade the GreptimeDB connector client and support an optional new parameter ttl to set the default time-to-live for automatically created tables.

  • #15294 Enhance LDAP authentication and authorization.
    LDAP authorization now supports extended ACL rules in JSON format.
    LDAP authenticaton now can fetch ACL rules from LDAP. These rules are cached in the client's metadata, so authorization is performed without additional LDAP queries.

  • #15349 Optimize external resource management for authentication and authorization. Previously, EMQX could remain connected to a resource configured for a disabled authentication or authorization provider.

  • #15360 Added support for writing data files in Parquet format for S3Tables Action.

  • #15364 Add HTTP header configuration items to the OpenTelemetry integration to adapt to collectors with HTTP authentication.

  • #15371 Added tags fields to the return of GET /actions_summary and to the fallback actions returned in GET /actions/:id.

  • #15387 Improved Kinesis Producer Connector and Action health checks to mitigate the occurrence of rate limiting when calling ListStreams and DescribeStream APIs. Now, we limit the the calls per Connector to such APIs to 5/s and 10/s, respectively. If a Connector or Action cannot call their health check API before timing out, they will simply maintain their current status. If they receive a throttling response (e.g.: LimitExceededException), they will also maintain their current status.

    Introduced a new resource_opts.health_check_interval_jitter configuration to add an uniform random delay to resource_opts.health_check_interval, so that multiple Actions under the same Connector will seldom run their health checks simultaneously.

  • #15399 Now, node_dump will export the current system configuration in HOCON format with redacted secrets.

  • #15401 Added support for Snowpipe Streaming upload mode for Snowflake Action. Note: this is currently a preview feature by Snowflake, and support for it is available to all accounts on AWS only.

  • #15418 Added new Connector and Action that appends data to BigQuery.

  • #15467 Expose transport options for AI Completion Providers.
    These options allow configuring connection timeouts and maximum connections to an AI Completion Provider.

Bug Fixes

  • #15342 Fixed NATS gateway crash when clientinfo override templates contain undefined packet fields by returning empty binary instead of undefined atom.

  • #15361 Fixed a function clause error when parsing a malformed User-Property pair where the pair length is wrong (too short).

  • #15394 Fixed a very rare race condition in which Action metrics could end up in an inconsistent state.

  • #15396 Removed redundant cleanup operations for shared subscriptions of disconnected clients, which were prone to crashes under high disconnect volume, resulting in potential inconsistencies in the global broker state.

  • #15416 Fixed occasional warning-level log events and crashes during session expiration of WebSocket connections, introduced by recent WebSocket performance improvements. These had no impact on broker capacity, but produced log entries like the following:

    • error: {function_clause,[{gen_tcp,send,[closed,[]],[{file,“gen_tcp.erl”},{line,966}]},{cowboy_websocket_linger,commands,3,[{file,“cowboy_websocket_linger.erl”},{line,665}]},...
    • message: {tcp,#Port<0.364>,<<136,130,...>>}, msg: emqx_session_mem_unknown_message
  • #15476 When most of the Actions that use aggregated mode (Azure Blob Storage, Snowflake, S3Tables) had a delivery that failed, the following log would be printed:

    "emqx_connector_aggreg_delivery:format_status/1 crashed"
    

    This has been fixed, and more information about the delivery process will now be logged.

  • #15518 Resolve a race condition that may lead to accumulating inconsistencies in the routing table and shared subscriptions state in the cluster when a large number of shared subscribers disconnect simultaneously.

  • #15522 Fixed an issue where Snowflake Connector would fail to start correctly is username was not provided.

EMQX v5.8.7

02 Jul 21:54
@id id

Choose a tag to compare

Bug Fixes

  • #15383 Fixed a potential resource leak in the MQTT bridge. When the bridge failed to start, the topic index table was not properly cleaned up. This fix ensures that the index table is correctly deleted to prevent resource leaks.
0