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

The MongoDB connector and bridge have been refactored to a separate app to improve code structure. Added info logs to indicate when buffered messages are dropped due to time-to-live (TTL) expiration. Rename `deliverrate` to `deliveryrate` in the configuration of `retainer`. Refactors the dashboard listener configuration to use a nested `ssl_options` field for ssl settings. - Change k8s `api_server` default value from `http://127.0.0.1:9091` to `https://kubernetes.default.svc:443` `emqxctl conf show cluster` no longer displays irrelevant configuration items, such as when `discoverystrategy=static`, it will not display configuration information related to `etcd/k8s/dns`. Remove `zones`(deprecated config key) from `emqxctl conf showkeys` Remove `/configs/limiter` api from `swagger.json`, only the api documentation was removed, and the `/configs/limiter` api functionalities have not been changed. Added 3 random SQL functions to the rule engine. random(): Generates a random number between 0 and 1 (0.0 =< X < 1.0). uuid_v4(): Generates a random UUID (version 4) string. uuidv4no_hyphen(): Generates a random UUID (version 4) string without hyphens. Adding a new configuration API `/configs`(GET/PUT) that supports to reload the hocon format configuration file. Upgraded emqtt dependency to avoid sensitive data leakage in the debug log. Improve time offset parser in rules engine and return uniform error codes. Do not allow wildcards for destination topic in rewrite rules. Addressed an inconsistency in the usage of 'div' and 'mod' operations within the rule engine. Previously, the 'div' operation was only usable as an infix operation and 'mod' could only be applied through a function call. With this change, both 'div' and 'mod' can be used via function call syntax and infix syntax. When starting an HTTP connector EMQX now returns a descriptive error in case the system is unable to connect to the remote target system. Fixed database number validation for Redis connector. Previously negative numbers were accepted as valid database numbers. Fix to adhere to Protocol spec MQTT-5.0 [MQTT-3.8.3-4]. Fixed an issue where connection errors in Kafka Producer would not be reported when reconnecting the bridge. Updated `erlcloud` dependency. Added a validation for the maximum number of pool workers of a bridge. Now the maximum amount is 1024 to avoid large memory consumption from an unreasonable number of workers. Ensure that validation errors in REST API responses are slightly less

Now, if there are out-of-range errors, they will be presented as `{"value": 42, "reason": {"expected": "1..10"}, ...}`, replacing the previous usage of `expected_type` with `expected`. Rule metrics for async mode bridges will set failure counters correctly now. Fix the value of the uppercase `authorization` header is not obfuscated. The Redis connector has been refactored to its own Erlang application to improve the code structure. Add several fixes and improvements in Ekka and Mria. Ekka: improve cluster discovery log messages to consistently describe actual events remove deprecated cluster auto-clean configuration parameter (it has been moved to Mria) Mria: ping only running replicant nodes. Previously, `mria_lb` was trying to ping both stopped and running replicant nodes, which might result in timeout errors. use `nullcopies` storage when copying `$mriarlog_sync` table. This fix has no effect on EMQX for now, as `$mriarlogsync` is only used in `mria:sync_transaction/2,3,4`, which is not utilized by EMQX. Fix when a node has left the cluster, other nodes still try to synchronize configuration update operations to it. Wait for Mria table when emqx_psk app is being started to ensure that PSK data is synced to replicant nodes even if they don't have init PSK file. The MySQL connector has been refactored to its own Erlang application to improve the code structure. Wait for Mria table when the mnesia backend of retainer starts to avoid a possible error of the retainer when joining a cluster. Fixed an issue in webhook bridge where, in async query mode, HTTP status codes like 4XX and 5XX would be treated as successes in the bridge metrics. Reintroduced support for nested (i.e.: `${payload.a.b.c}`) placeholders for extracting data from rule action messages without the need for calling `json_decode(payload)` first. Fix the `payload` will be duplicated in the below situations: Use a `foreach` sentence without the `as` sub-expression and select all fields(use the `*` or omitted the `do` sub-expression) For example: `FOREACH payload.sensors FROM "t/#"` Select the `payload` field and all fields For example: `SELECT payload.sensors, * FROM "t/#"` Fixed the encoding of the `server` key coming from an ingress MQTT bridge. Before the fix, it was being encoded as a list of integers corresponding to the ASCII characters of the server string.