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

Add log level configuration to SSL communication Introduce a more straightforward configuration option `keepalive_multiplier` and deprecate the old `keepalive_backoff` configuration. After this enhancement, EMQX checks the client's keepalive timeout status period by multiplying the "Client Requested Keepalive Interval" with `keepalive_multiplier`. We hide the requesttimeout in resourceoption of the webhook to keep it consistent with the http request_timeout of the webhook. From now on, when configuring a webhook through API or configuration files, it is no longer necessary to configure the requesttimeout of the resource. Only configuring the http requesttimeout is sufficient, and the requesttimeout in the resource will automatically be consistent with the http requesttimeout. Improve the security and privacy of some resource logs by masking sensitive information in the data. Optimized counter increment calls to avoid work if increment is zero. Added a retry mechanism to webhook bridge that attempts to improve throughput. This optimization retries request failures without blocking the buffering layer, which can improve throughput in situations of high messaging rate. Optimize memory usage when accessing the configuration during runtime. Fixed the issue that could lead to crash logs being printed when stopping EMQX via systemd. ``` 2023-03-29T16:43:25.915761+08:00 [error] Generic server memsup terminating. Reason: {portdied,normal}. Last message: {'EXIT',<0.2117.0>,{portdied,normal}}. State: [{data,[{"Timeout",60000}]},{items,{"Memory Usage",[{"Allocated",929959936},{"Total",3832242176}]}},{items,{"Worst Memory User",[{"Pid",<0.2031.0>},{"Memory",4720472}]}}]. 2023-03-29T16:43:25.924764+08:00 [error] crasher: initial call: memsup:init/1, pid: <0.2116.0>, registeredname: memsup, exit: {{portdied,normal},[{genserver,handlecommonreply,8,[{file,"genserver.erl"},{line,811}]},{proclib,initpdoapply,3,[{file,"proclib.erl"},{line,226}]}]}, ancestors: [osmonsup,<0.2114.0>], messagequeuelen: 0, messages: [], links: [<0.2115.0>], dictionary: [], trapexit: true, status: running, heapsize: 4185, stacksize: 29, reductions: 187637; neighbours: 2023-03-29T16:43:25.924979+08:00 [error] Supervisor: {local,osmonsup}. Context: childterminated. Reason: {portdied,normal}. Offender: id=memsup,pid=<0.2116.0>. ``` Corrected an issue where the no_local flag was not functioning correctly. Deleted emqx_statsd application. Store gateway authentication TLS certificates and keys in the data directory. In Rule API, reapond with 404 HTTP error code when trying to delete a rule that does not exist. Fix the timestamp for the will message is incorrectly assigned at the session creation time, now this timestamp is the disconnected time of the session. RPM package for Amazon Linux 2 did not support TLS v1.3 as it was assembled with Erlang/OTP built with openssl 1.0. Postpone trimming the connection information structure until after `client.connected` hooks have been executed. These hooks once again have access to the client's peer certificate. Fixed an issue where the buffering layer processes could use a lot of CPU when inflight window is full. A summary has been added for all endpoints in the HTTP API documentation (accessible at "http://emqxhostname:18083/api-docs"). Validate Health Check Interval and Auto Restart Interval against the range from 1ms to 1 hour. Fixed an issue where the rule engine was unable to access variables exported by `FOREACH` in the `DO` clause. Given a payload: `{"date": "2023-05-06", "array": ["a"]}`, as well as the following SQL statement: ``` FOREACH payload.date as date,

as elem DO date, elem FROM "t/#" ``` Prior to the fix, the `date` variable exported by `FOREACH` could not be accessed in the `DO` clause of the above SQL, resulting in the following output for the SQL statement: `[{"elem": "a","date": "undefined"}]`. After the fix, the output of the SQL statement is: `[{"elem": "a","date": "2023-05-06"}]` Fix the issue where the HTTP API interface of Gateway cannot handle ClientIDs with special characters, such as: `!@#$%^&*()_+{}:"<>?/`. Check the correctness of the rules before saving the authorization file source. Previously, Saving wrong rules could lead to restart failure. Fixes an issue where trying to get a bridge info or metrics could result in a crash when a node is joining a cluster. Add missing support of the event `$events/deliverydropped` into the rule engine test API `ruletest`. Refactor date and time functions, `formatdate` and `datetounixts`, in the rule engine to fix the implementation problem. Fixed data bridge resource update race condition. In the 'delete + create' process for EMQX resource updates, long bridge creation times could cause dashboard request timeouts. If a bridge resource update was initiated before completion of its creation, it led to an erroneous deletion from the runtime, despite being present in the config file. This fix addresses the race condition in bridge resource updates, ensuring the accurate identification and addition of new resources, maintaining consistency between runtime and configuration file statuses. Fix Internal Error 500 that occurred sometimes when bridge statistics page was updated while a node was (re)joining the cluster. Fixing the issue where the default value of SSL certificate for Dashboard Listener was not correctly interpolated, which caused HTTPS to be inaccessible when verify_peer and cacertfile were using the default configuration. Ensure `EMQXLOGDIR` is set by Windows boot script. The environment variable `EMQXLOGDIR` was missing in v5.0.25, caused EMQX Windows package fail to boot unless set by sysadmin. Avoid duplicated percent decode the topic name in API `/topics/{topic}` and `/topics`. Address ` ERROR Mnesia post_commit hook failed: error:badarg` error messages happening during node shutdown or restart. Mria pull request: https://github.com/emqx/mria/pull/142 Fix the error of not being able to configure `autorestartinterval` as infinity Fixing `emqx_ctl traces` command. In case the cluster updated license before the new node join in. The new node will not apply the updated license. After this change, the new joined node will use the cluster's license key. Sometimes the new node must start with a outdated license. e.g. use emqx-operator deployed and needed to scale up after license expired. At the time the cluster's license key already updated by API/CLI, but the new node won't use it. Only include enabled authenticators and authorizers in telemetry report, not all of them. Obfuscated sensitive data in the bad API logging.