Project: EMQ Technologies (App Definition and Development / Streaming & Messaging)
File: e5.0.3.en.md

Add support for OCSP stapling for SSL MQTT listeners. Change the configuration overlay order: If it is a new installation of EMQX, `emqx.conf` + Environment variables overlays on top of API Updated Configs (`cluster.hocon`) If EMQX is upgraded from an older version (i.e., the `cluster-override.conf` file still exists in EMQX's `data` directory), then its the same as before, that is `cluster-override.conf` overlays on top of `emqx.conf` + Environment variables. Please note that `data/configs/cluster-override.conf` is considered deprecated. After upgrade, you are encouraged to update `emqx.conf` to delete configs which are overridden by `cluster-override.conf` and move the configs in `cluster-override.conf` to `cluster.hocon`. After upgrade, EMQX will continue to read `local-override.conf` (if it exists) as before, but you are encouraged to merge the configs to `emqx.conf`. Add CRL check support for TLS MQTT listeners. Improve OpenAPI (swagger) document readability. Prior to this change, there were a few `summary` docs which are lengthy and lack of translation, now it makes use of the more concise `label` field from schema i18n database instead. Eliminated a few harmless error level logs. Prior to this change, there might be some Mnesia callback (hook) failures occasionally occurring when stopping/restarting Mria. Now the callbacks (hooks) are unregistered prior to stop. See also . Add the option to customize `clusterIP` in Helm chart, so that a user may set it to a fixed IP. Add command `eval-ex` for Elixir expression evaluation. Refactor the directory structure of all gateways. Support async query mode for all data bridges. Prior to this change, setting the query mode of a resource such as a bridge to sync would force the buffer to call the underlying connector in a synchronous way, even if it supports async calls. Add support for async query mode for most bridges. This is a follow-up change after . Before this change, some bridges (Cassandra, MongoDB, MySQL, Postgres, Redis, RocketMQ, TDengine) were only allowed to be created with a sync query mode. Now async mode is also supported. Prior to this enhancement, only double quotes (") were allowed in rule engine SQL language's FROM clause. Now it also supports single quotes ('). Add `/rule_engine` API endpoint to manage configuration of rule engine. More specific error messages when configure with `bad maxheapsize` value. Log current value and the max value when the `messagequeuetoo_long` error is thrown. Hide `flappingdetect/conncongestion/stats` configuration. Deprecate `flapping_detect.enable`. Metrics now are not implicitly collected in places where API handlers don't make any use of them. Instead, a separate backplane RPC gathers cluster-wide metrics. Deprecate the `trace.payloadencode` configuration. Add `payloadencode=[text,hidden,hex]` option when creating a trace via HTTP

Hide the `auto_subscribe` configuration items so that they can be modified later only through the HTTP API. Hide a large number of advanced options to simplify the configuration file. That includes `rewrite`, `topicmetric`, `persistentsessionstore`, `overloadprotection`, `flappingdetect`, `conncongestion`, `stats,autosubscribe`, `brokerperf`, `sharedsubscriptiongroup`, `slowsubs`, `ssloptions.userlookupfun` and some advance items in `node` and `dashboard` section, , , . Change the default queue mode for buffer workers to `memoryonly`. Before this change, the default queue mode was `volatileoffload`. When under high message rate pressure and when the resource is not keeping up with such rate, the buffer performance degraded a lot due to the constant disk operations. Integrate Cassandra into bridges as a new backend. At the current stage only support Cassandra version 3.x, not yet 4.x. Add RocketMQ data integration bridge. Support escaped special characters in InfluxDB data bridge `write_syntax`. This update allows to use escaped special characters in string elements in accordance with InfluxDB line protocol. Hide `broker.brokerperf` config and API documents. The two configs `routelocktype` and `triecompaction` are rarely used and requires a full cluster restart to take effect. They are not suitable for being exposed to users. Detailed changes can be found here: https://gist.github.com/zmstone/01ad5754b9beaeaf3f5b86d14d49a0b7/revisions. When configuring a MongoDB bridge, you can now use the `${field}` syntax to reference fields in the message. This enables you to select the collection to insert data into dynamically. Implement Microsoft SQL Server bridge. Improved performance of Webhook bridge when using synchronous query mode. This also should improve the performance of other bridges when they are configured with no batching. Add field `status_reason` to `GET /bridges/:id` response in case this bridge is in status `disconnected` if internal health-check reports an error condition. Include this same error condition in message when creating an alarm for a failing bridge. Fix the incorrect regular expression in default ACL rule to allow specify username(dashboard) to subscribe `$SYS/#`. Upgrade library `esockd` from 5.9.4 to 5.9.6. Fix an unnecessary error level logging when a connection is closed before proxy protocol header is sent by the proxy. Add labels to API schemas where description contains raw HTML, which would break formatting of generated documentation otherwise. Use lower-case for schema summaries and descriptions to be used in menu of generated online documentation. Fix bug where a last will testament (LWT) message could be published when kicking out a banned client. Allow installing a plugin if its name matches the beginning of another (already installed) plugin name. For example: if plugin `emqxplugintemplatea` is installed, it must not block installing plugin `emqxplugin_template`. Handle validation error in `/bridges` API and return `400` instead of `500`. Fixed a log data field name

Prior to this fix, some debug logs may report a wrong Erlang PID which may affect troubleshooting session takeover issues. Fixed the issue where `auto_observe` was not working in LwM2M Gateway. Before the fix, `OBSERVE` requests were sent without a token, causing failures that LwM2M clients could not handle. After the fix, LwM2M Gateway can correctly observe the resource list carried by client, furthermore, unknown resources will be ignored and printing the following warning log: ``` 2023-03-28T18:50:27.771123+08:00 [warning] msg: ignoreobserverresource, mfa: emqxlwm2msession:observeobjectlist/3, line: 522, peername: 127.0.0.1:56830, clientid: testlwm2mclient, objectid: 31024, reason: noxml_definition ``` Enhance logging behaviour during boot failure. When EMQX fails to start due to corrupted configuration files, excessive logging is eliminated and no crash dump file is generated. Keeps `eval` command backward compatible with v4 by evaluating only Erlang expressions, even on Elixir node. For Elixir expressions, use `eval-ex` command. Fixed issue with Elixir builds that prevented plugins from being configured via environment variables. Fix crash checking `limit` and `page` parameters in `/mqtt/delayed/messages` API call. Do not expose listener level authentications before extensive verification. For security reasons, the value of the password field in the API examples is replaced with ``. Fix config check failed when gateways are configured in emqx.conf. This issue was first introduced in v5.0.22 via , the boot-time config check was missing. Fixed an issue that could cause (otherwise harmless) noise in the logs. During some particularly slow synchronous calls to bridges, some late replies could be sent to connections processes that were no longer expecting a reply, and then emit an error log like: ``` 2023-04-19T18:24:35.350233+00:00 [error] msg: unexpectedinfo, mfa: emqxchannel:handleinfo/2, line: 1278, peername: 172.22.0.1:36384, clientid: caribdisbenchsub1137967633_4788, info: {#Ref<0.408802983.1941504010.189402>,{ok,200,[{<<"cache-control">>,<<"max-age=0, ...">>}} ``` Those logs are harmless, but they could flood and worry the users without need. Validate the `ssloptions` and `header` configurations when creating authentication http (`authnhttp`). Prior to this, incorrect `ssl` configuration could result in successful creation but the entire authn being unusable. Fixed a race condition in the HTTP driver that would result in an error rather than a retry of the request. Related fix in the driver: https://github.com/emqx/ehttpc/pull/45 In TDengine data bridge, removed the redundant database name from the SQL template. ClickHouse data bridge has got a fix that makes the error message better when users click the test button in the settings dialog. Previously, when attempting to reconnect to a misconfigured ClickHouse bridge through the dashboard, users would not receive an error message. This issue is now resolved, and error messages will now be displayed. Fix some configuration item terminology errors in the DynamoDB data bridge: Changed `database` to `table` Changed `username` to `awsaccesskey_id` Changed `password` to `awssecretaccess_key`