From a1ffd0263deb44761b7d0de652f7410f8406d0d3 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 8 Aug 2023 10:13:13 -0300 Subject: [PATCH 1/7] fix(cacerts): add `cacerts` back as deprecated to allow upgrading from older versions See https://github.com/emqx/emqx/issues/11380 --- apps/emqx/src/emqx_schema.erl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 5cab3cbc5..e6bff790e 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -2017,6 +2017,14 @@ common_ssl_opts_schema(Defaults, Type) -> desc => ?DESC(common_ssl_opts_schema_cacertfile) } )}, + {"cacerts", + sc( + boolean(), + #{ + default => false, + deprecated => {since, "5.1.4"} + } + )}, {"certfile", sc( binary(), From fdfdb105f0a229d98f6d02ddd6f5e62a1a326330 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 8 Aug 2023 10:23:17 -0300 Subject: [PATCH 2/7] docs: Generate changelog for v5.1.5 --- apps/emqx/include/emqx_release.hrl | 2 +- changes/ce/fix-11410.en.md | 3 +++ changes/v5.1.5.en.md | 24 ++++++++++++++++++++++++ deploy/charts/emqx/Chart.yaml | 4 ++-- 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 changes/ce/fix-11410.en.md create mode 100644 changes/v5.1.5.en.md diff --git a/apps/emqx/include/emqx_release.hrl b/apps/emqx/include/emqx_release.hrl index 31afc0ef5..5238c38b0 100644 --- a/apps/emqx/include/emqx_release.hrl +++ b/apps/emqx/include/emqx_release.hrl @@ -32,7 +32,7 @@ %% `apps/emqx/src/bpapi/README.md' %% Opensource edition --define(EMQX_RELEASE_CE, "5.1.4"). +-define(EMQX_RELEASE_CE, "5.1.5"). %% Enterprise edition -define(EMQX_RELEASE_EE, "5.1.1"). diff --git a/changes/ce/fix-11410.en.md b/changes/ce/fix-11410.en.md new file mode 100644 index 000000000..f0c144652 --- /dev/null +++ b/changes/ce/fix-11410.en.md @@ -0,0 +1,3 @@ +Reintroduce `cacerts` TLS client option as a deprecated option. + +This fixes issues found when trying to upgrade from 5.1.3 where that option is set in the configuration files or persisted in EMQX Operator settings. diff --git a/changes/v5.1.5.en.md b/changes/v5.1.5.en.md new file mode 100644 index 000000000..69377f157 --- /dev/null +++ b/changes/v5.1.5.en.md @@ -0,0 +1,24 @@ +# v5.1.5 + +## Enhancements + +- [#10697](https://github.com/emqx/emqx/pull/10697) This change allows to set the minReadySeconds for the StatefulSet. This allows to add a gap between the restarts of each pod by upgrade or restart command. + +- [#11390](https://github.com/emqx/emqx/pull/11390) Add `node.broker_pool_size`, `node.generic_pool_size`, `node.channel_cleanup_batch_size` options to EMQX configuration. + + Tuning these options can significantly improve performance if cluster interconnect network latency is high. + +- [#11389](https://github.com/emqx/emqx/pull/11389) Improved retained message publishing latency by consolidating multiple index update operations into a single mnesia activity, leveraging the new APIs introduced in mria 0.6.0. + +## Bug Fixes + +- [#11388](https://github.com/emqx/emqx/pull/11388) Increase `emqx_router_sup` restart intensity. + + The goal is to tolerate occasional crashes that can happen under relatively normal conditions + and don't seem critical to shutdown the whole app (emqx). + For example, mria write/delete call delegated from a replicant to a core node by `emqx_router_helper` may fail, + if the core node is being stopped / restarted / not ready. + +- [#11410](https://github.com/emqx/emqx/pull/11410) Reintroduce `cacerts` TLS client option as a deprecated option. + + This fixes issues found when trying to upgrade from 5.1.3 where that option is set in the configuration files or persisted in EMQX Operator settings. diff --git a/deploy/charts/emqx/Chart.yaml b/deploy/charts/emqx/Chart.yaml index 89699ff9e..f1e4fe822 100644 --- a/deploy/charts/emqx/Chart.yaml +++ b/deploy/charts/emqx/Chart.yaml @@ -14,8 +14,8 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. -version: 5.1.4 +version: 5.1.5 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. -appVersion: 5.1.4 +appVersion: 5.1.5 From 5294d6b9134ecea9210d1409895e5df3bc107ec4 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 9 Aug 2023 13:15:58 -0300 Subject: [PATCH 3/7] ci: use `-patch.[0-9]+` for patch releases Using just `-[0-9]+` requires further changes to the parser in `emqx_release`, and might also cause problems with Elixir's `Version.parse` depending on the suffix. --- scripts/parse-git-ref.sh | 4 ++-- scripts/shelltest/parse-git-ref.test | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/scripts/parse-git-ref.sh b/scripts/parse-git-ref.sh index 5209afcc1..4cb138212 100755 --- a/scripts/parse-git-ref.sh +++ b/scripts/parse-git-ref.sh @@ -20,7 +20,7 @@ if [[ $1 =~ ^refs/tags/v[5-9]+\.[0-9]+\.[0-9]+$ ]]; then PROFILE=emqx RELEASE=true LATEST=$(is_latest "$1") -elif [[ $1 =~ ^refs/tags/v[5-9]+\.[0-9]+\.[0-9]+-[0-9]+$ ]]; then +elif [[ $1 =~ ^refs/tags/v[5-9]+\.[0-9]+\.[0-9]+-patch\.[0-9]+$ ]]; then PROFILE=emqx RELEASE=true LATEST=$(is_latest "$1") @@ -28,7 +28,7 @@ elif [[ $1 =~ ^refs/tags/e[5-9]+\.[0-9]+\.[0-9]+$ ]]; then PROFILE=emqx-enterprise RELEASE=true LATEST=$(is_latest "$1") -elif [[ $1 =~ ^refs/tags/e[5-9]+\.[0-9]+\.[0-9]+-[0-9]+$ ]]; then +elif [[ $1 =~ ^refs/tags/e[5-9]+\.[0-9]+\.[0-9]+-patch\.[0-9]+$ ]]; then PROFILE=emqx-enterprise RELEASE=true LATEST=$(is_latest "$1") diff --git a/scripts/shelltest/parse-git-ref.test b/scripts/shelltest/parse-git-ref.test index a77f075ad..543ae4e8f 100644 --- a/scripts/shelltest/parse-git-ref.test +++ b/scripts/shelltest/parse-git-ref.test @@ -8,12 +8,22 @@ Unrecognized tag: refs/tags/v5.2.0-foobar.1 Unrecognized git ref: v5.2.0 >>>= 1 +./parse-git-ref.sh v5.2.0-1 +>>>2 +Unrecognized git ref: v5.2.0-1 +>>>= 1 + +./parse-git-ref.sh e5.2.0-1 +>>>2 +Unrecognized git ref: e5.2.0-1 +>>>= 1 + ./parse-git-ref.sh refs/tags/v5.1.0 >>> {"profile": "emqx", "release": true, "latest": false} >>>= 0 -./parse-git-ref.sh refs/tags/v5.1.5-1 +./parse-git-ref.sh refs/tags/v5.1.5-patch.1 >>> {"profile": "emqx", "release": true, "latest": false} >>>= 0 @@ -43,7 +53,7 @@ Unrecognized tag: refs/tags/v5.2.0-alpha-1 {"profile": "emqx-enterprise", "release": true, "latest": false} >>>= 0 -./parse-git-ref.sh refs/tags/e5.1.5-1 +./parse-git-ref.sh refs/tags/e5.1.5-patch.1 >>> {"profile": "emqx-enterprise", "release": true, "latest": false} >>>= 0 From 95df958f10619c3b65c8c7672baff2ca8bda08c5 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 9 Aug 2023 13:18:09 -0300 Subject: [PATCH 4/7] docs: Generate changelog for v5.1.5-patch.1 --- apps/emqx/include/emqx_release.hrl | 2 +- changes/v5.1.5-patch.1.en.md | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 changes/v5.1.5-patch.1.en.md diff --git a/apps/emqx/include/emqx_release.hrl b/apps/emqx/include/emqx_release.hrl index 5238c38b0..7d733c502 100644 --- a/apps/emqx/include/emqx_release.hrl +++ b/apps/emqx/include/emqx_release.hrl @@ -32,7 +32,7 @@ %% `apps/emqx/src/bpapi/README.md' %% Opensource edition --define(EMQX_RELEASE_CE, "5.1.5"). +-define(EMQX_RELEASE_CE, "5.1.5-patch.1"). %% Enterprise edition -define(EMQX_RELEASE_EE, "5.1.1"). diff --git a/changes/v5.1.5-patch.1.en.md b/changes/v5.1.5-patch.1.en.md new file mode 100644 index 000000000..8958c9613 --- /dev/null +++ b/changes/v5.1.5-patch.1.en.md @@ -0,0 +1,26 @@ +# v5.1.5-patch.1 + +## Enhancements + +- [#10697](https://github.com/emqx/emqx/pull/10697) This change allows to set the minReadySeconds for the StatefulSet. This allows to add a gap between the restarts of each pod by upgrade or restart command. + +- [#11390](https://github.com/emqx/emqx/pull/11390) Add `node.broker_pool_size`, `node.generic_pool_size`, `node.channel_cleanup_batch_size` options to EMQX configuration. + + Tuning these options can significantly improve performance if cluster interconnect network latency is high. + +- [#11389](https://github.com/emqx/emqx/pull/11389) Improved retained message publishing latency by consolidating multiple index update operations into a single mnesia activity, leveraging the new APIs introduced in mria 0.6.0. + +- [#11405](https://github.com/emqx/emqx/pull/11405) Improve the error reason of the `date_to_unix_ts` to make more sense. + +## Bug Fixes + +- [#11388](https://github.com/emqx/emqx/pull/11388) Increase `emqx_router_sup` restart intensity. + + The goal is to tolerate occasional crashes that can happen under relatively normal conditions + and don't seem critical to shutdown the whole app (emqx). + For example, mria write/delete call delegated from a replicant to a core node by `emqx_router_helper` may fail, + if the core node is being stopped / restarted / not ready. + +- [#11410](https://github.com/emqx/emqx/pull/11410) Reintroduce `cacerts` TLS client option as a deprecated option. + + This fixes issues found when trying to upgrade from 5.1.3 where that option is set in the configuration files or persisted in EMQX Operator settings. From bb8ce68c2ef1915b180889d2d46c92465fa93e85 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 9 Aug 2023 16:38:28 -0300 Subject: [PATCH 5/7] docs: Generate changelog for v5.1.5-patch.2 --- apps/emqx/include/emqx_release.hrl | 2 +- apps/emqx/src/emqx.app.src | 2 +- changes/v5.1.5-patch.2.en.md | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 changes/v5.1.5-patch.2.en.md diff --git a/apps/emqx/include/emqx_release.hrl b/apps/emqx/include/emqx_release.hrl index 7d733c502..1cd35ad58 100644 --- a/apps/emqx/include/emqx_release.hrl +++ b/apps/emqx/include/emqx_release.hrl @@ -32,7 +32,7 @@ %% `apps/emqx/src/bpapi/README.md' %% Opensource edition --define(EMQX_RELEASE_CE, "5.1.5-patch.1"). +-define(EMQX_RELEASE_CE, "5.1.5-patch.2"). %% Enterprise edition -define(EMQX_RELEASE_EE, "5.1.1"). diff --git a/apps/emqx/src/emqx.app.src b/apps/emqx/src/emqx.app.src index d9598ee1b..73e390215 100644 --- a/apps/emqx/src/emqx.app.src +++ b/apps/emqx/src/emqx.app.src @@ -2,7 +2,7 @@ {application, emqx, [ {id, "emqx"}, {description, "EMQX Core"}, - {vsn, "5.1.5"}, + {vsn, "5.1.6"}, {modules, []}, {registered, []}, {applications, [ diff --git a/changes/v5.1.5-patch.2.en.md b/changes/v5.1.5-patch.2.en.md new file mode 100644 index 000000000..2386fb5ee --- /dev/null +++ b/changes/v5.1.5-patch.2.en.md @@ -0,0 +1,26 @@ +# v5.1.5-patch.2 + +## Enhancements + +- [#10697](https://github.com/emqx/emqx/pull/10697) This change allows to set the minReadySeconds for the StatefulSet. This allows to add a gap between the restarts of each pod by upgrade or restart command. + +- [#11390](https://github.com/emqx/emqx/pull/11390) Add `node.broker_pool_size`, `node.generic_pool_size`, `node.channel_cleanup_batch_size` options to EMQX configuration. + + Tuning these options can significantly improve performance if cluster interconnect network latency is high. + +- [#11389](https://github.com/emqx/emqx/pull/11389) Improved retained message publishing latency by consolidating multiple index update operations into a single mnesia activity, leveraging the new APIs introduced in mria 0.6.0. + +- [#11405](https://github.com/emqx/emqx/pull/11405) Improve the error reason of the `date_to_unix_ts` to make more sense. + +## Bug Fixes + +- [#11388](https://github.com/emqx/emqx/pull/11388) Increase `emqx_router_sup` restart intensity. + + The goal is to tolerate occasional crashes that can happen under relatively normal conditions + and don't seem critical to shutdown the whole app (emqx). + For example, mria write/delete call delegated from a replicant to a core node by `emqx_router_helper` may fail, + if the core node is being stopped / restarted / not ready. + +- [#11410](https://github.com/emqx/emqx/pull/11410) Reintroduce `cacerts` TLS client option as a deprecated option. + + This fixes issues found when trying to upgrade from 5.1.3 where that option is set in the configuration files or persisted in EMQX Operator settings. From 801c93dd46acdb3bbf700c10e72bae9a898ade60 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Thu, 10 Aug 2023 12:20:17 +0200 Subject: [PATCH 6/7] chore: v5.1.5-build.3 --- apps/emqx/include/emqx_release.hrl | 2 +- apps/emqx/src/emqx.app.src | 2 +- apps/emqx_conf/src/emqx_conf.app.src | 2 +- apps/emqx_machine/src/emqx_machine.app.src | 2 +- build | 2 +- scripts/parse-git-ref.sh | 4 ++-- scripts/semver.sh | 18 +++++++++--------- scripts/shelltest/parse-git-ref.test | 4 ++-- scripts/shelltest/semver.test | 16 ++++++++-------- 9 files changed, 26 insertions(+), 26 deletions(-) diff --git a/apps/emqx/include/emqx_release.hrl b/apps/emqx/include/emqx_release.hrl index 1cd35ad58..d76c02d78 100644 --- a/apps/emqx/include/emqx_release.hrl +++ b/apps/emqx/include/emqx_release.hrl @@ -32,7 +32,7 @@ %% `apps/emqx/src/bpapi/README.md' %% Opensource edition --define(EMQX_RELEASE_CE, "5.1.5-patch.2"). +-define(EMQX_RELEASE_CE, "5.1.5-build.3"). %% Enterprise edition -define(EMQX_RELEASE_EE, "5.1.1"). diff --git a/apps/emqx/src/emqx.app.src b/apps/emqx/src/emqx.app.src index 73e390215..f324d6ae0 100644 --- a/apps/emqx/src/emqx.app.src +++ b/apps/emqx/src/emqx.app.src @@ -2,7 +2,7 @@ {application, emqx, [ {id, "emqx"}, {description, "EMQX Core"}, - {vsn, "5.1.6"}, + {vsn, "5.1.7"}, {modules, []}, {registered, []}, {applications, [ diff --git a/apps/emqx_conf/src/emqx_conf.app.src b/apps/emqx_conf/src/emqx_conf.app.src index 86fb169a6..ab65c03c8 100644 --- a/apps/emqx_conf/src/emqx_conf.app.src +++ b/apps/emqx_conf/src/emqx_conf.app.src @@ -1,6 +1,6 @@ {application, emqx_conf, [ {description, "EMQX configuration management"}, - {vsn, "0.1.25"}, + {vsn, "0.1.26"}, {registered, []}, {mod, {emqx_conf_app, []}}, {applications, [kernel, stdlib, emqx_ctl]}, diff --git a/apps/emqx_machine/src/emqx_machine.app.src b/apps/emqx_machine/src/emqx_machine.app.src index bdd1db76e..e86351556 100644 --- a/apps/emqx_machine/src/emqx_machine.app.src +++ b/apps/emqx_machine/src/emqx_machine.app.src @@ -3,7 +3,7 @@ {id, "emqx_machine"}, {description, "The EMQX Machine"}, % strict semver, bump manually! - {vsn, "0.2.10"}, + {vsn, "0.2.11"}, {modules, []}, {registered, []}, {applications, [kernel, stdlib, emqx_ctl]}, diff --git a/build b/build index 34f7e8edb..03d1ce673 100755 --- a/build +++ b/build @@ -382,7 +382,7 @@ make_docker() { # shellcheck disable=SC2155 local VSN_MINOR="$(scripts/semver.sh "$PKG_VSN" --minor)" # shellcheck disable=SC2155 - local VSN_MINOR="$(scripts/semver.sh "$PKG_VSN" --patch)" + local VSN_PATCH="$(scripts/semver.sh "$PKG_VSN" --patch)" local SUFFIX='' if [[ "$PROFILE" = *-elixir ]]; then SUFFIX="-elixir" diff --git a/scripts/parse-git-ref.sh b/scripts/parse-git-ref.sh index 4cb138212..b0d01d2d3 100755 --- a/scripts/parse-git-ref.sh +++ b/scripts/parse-git-ref.sh @@ -20,7 +20,7 @@ if [[ $1 =~ ^refs/tags/v[5-9]+\.[0-9]+\.[0-9]+$ ]]; then PROFILE=emqx RELEASE=true LATEST=$(is_latest "$1") -elif [[ $1 =~ ^refs/tags/v[5-9]+\.[0-9]+\.[0-9]+-patch\.[0-9]+$ ]]; then +elif [[ $1 =~ ^refs/tags/v[5-9]+\.[0-9]+\.[0-9]+-build\.[0-9]+$ ]]; then PROFILE=emqx RELEASE=true LATEST=$(is_latest "$1") @@ -28,7 +28,7 @@ elif [[ $1 =~ ^refs/tags/e[5-9]+\.[0-9]+\.[0-9]+$ ]]; then PROFILE=emqx-enterprise RELEASE=true LATEST=$(is_latest "$1") -elif [[ $1 =~ ^refs/tags/e[5-9]+\.[0-9]+\.[0-9]+-patch\.[0-9]+$ ]]; then +elif [[ $1 =~ ^refs/tags/e[5-9]+\.[0-9]+\.[0-9]+-build\.[0-9]+$ ]]; then PROFILE=emqx-enterprise RELEASE=true LATEST=$(is_latest "$1") diff --git a/scripts/semver.sh b/scripts/semver.sh index 065241355..5abf77fd6 100755 --- a/scripts/semver.sh +++ b/scripts/semver.sh @@ -6,21 +6,21 @@ function parseSemver() { local RE='^([0-9]+)\.([0-9]+)\.([0-9]+)(-([a-z]+\.[0-9]+))?$' echo "$1" | grep -qE "$RE" || exit 1 #shellcheck disable=SC2155 - local MAJOR=$( echo "$1" | sed -r "s#$RE#\1#") + local MAJOR=$(echo "$1" | sed -r "s#$RE#\1#") #shellcheck disable=SC2155 - local MINOR=$( echo "$1" | sed -r "s#$RE#\2#") + local MINOR=$(echo "$1" | sed -r "s#$RE#\2#") #shellcheck disable=SC2155 - local PATCH=$( echo "$1" | sed -r "s#$RE#\3#") + local PATCH=$(echo "$1" | sed -r "s#$RE#\3#") #shellcheck disable=SC2155 - local SPECIAL=$(echo "$1" | sed -r "s#$RE#\5#") + local BUILD=$(echo "$1" | sed -r "s#$RE#\5#") case "${2}" in - --major) echo "${MAJOR}" ;; - --minor) echo "${MINOR}" ;; - --patch) echo "${PATCH}" ;; - --special) echo "${SPECIAL}" ;; + --major) echo "${MAJOR}" ;; + --minor) echo "${MINOR}" ;; + --patch) echo "${PATCH}" ;; + --build) echo "${BUILD}" ;; *) cat <>>= 0 -./parse-git-ref.sh refs/tags/v5.1.5-patch.1 +./parse-git-ref.sh refs/tags/v5.1.5-build.1 >>> {"profile": "emqx", "release": true, "latest": false} >>>= 0 @@ -53,7 +53,7 @@ Unrecognized tag: refs/tags/v5.2.0-alpha-1 {"profile": "emqx-enterprise", "release": true, "latest": false} >>>= 0 -./parse-git-ref.sh refs/tags/e5.1.5-patch.1 +./parse-git-ref.sh refs/tags/e5.1.5-build.1 >>> {"profile": "emqx-enterprise", "release": true, "latest": false} >>>= 0 diff --git a/scripts/shelltest/semver.test b/scripts/shelltest/semver.test index 60a85dce1..b04543cad 100644 --- a/scripts/shelltest/semver.test +++ b/scripts/shelltest/semver.test @@ -3,30 +3,30 @@ ./semver.sh 5.1.0 >>> -{"major": 5, "minor": 1, "patch": 0, "special": ""} +{"major": 5, "minor": 1, "patch": 0, "build": ""} >>>= 0 -./semver.sh 5.1.0-patch.3 +./semver.sh 5.1.0-build.3 >>> -{"major": 5, "minor": 1, "patch": 0, "special": "patch.3"} +{"major": 5, "minor": 1, "patch": 0, "build": "build.3"} >>>= 0 -./semver.sh 5.1.0-patch.3 --major +./semver.sh 5.1.0-build.3 --major >>> 5 >>>= 0 -./semver.sh 5.1.0-patch.3 --minor +./semver.sh 5.1.0-build.3 --minor >>> 1 >>>= 0 -./semver.sh 5.1.0-patch.3 --patch +./semver.sh 5.1.0-build.3 --patch >>> 0 >>>= 0 -./semver.sh 5.1.0-patch.3 --special +./semver.sh 5.1.0-build.3 --build >>> -patch.3 +build.3 >>>= 0 From 10a1f1d43b428064f69fec3135ba68b0de5f0d46 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Thu, 10 Aug 2023 12:21:51 +0200 Subject: [PATCH 7/7] docs: Generate changelog for v5.1.5-build.3 --- changes/v5.1.5-build.3.en.md | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 changes/v5.1.5-build.3.en.md diff --git a/changes/v5.1.5-build.3.en.md b/changes/v5.1.5-build.3.en.md new file mode 100644 index 000000000..f8317a3d8 --- /dev/null +++ b/changes/v5.1.5-build.3.en.md @@ -0,0 +1,37 @@ +# v5.1.5-build.3 + +## Enhancements + +- [#10697](https://github.com/emqx/emqx/pull/10697) This change allows to set the minReadySeconds for the StatefulSet. This allows to add a gap between the restarts of each pod by upgrade or restart command. + +- [#11390](https://github.com/emqx/emqx/pull/11390) Add `node.broker_pool_size`, `node.generic_pool_size`, `node.channel_cleanup_batch_size` options to EMQX configuration. + + Tuning these options can significantly improve performance if cluster interconnect network latency is high. + +- [#11389](https://github.com/emqx/emqx/pull/11389) Improved retained message publishing latency by consolidating multiple index update operations into a single mnesia activity, leveraging the new APIs introduced in mria 0.6.0. + +- [#11399](https://github.com/emqx/emqx/pull/11399) Improved the placeholder syntax of rule engine. + + The parameters of actions support using placeholder syntax to + dynamically fill in the content of strings. The format of the + placeholder syntax is `${key}`. + Before this improvement, the `key` in `${key}` could only contain + letters, numbers, and underscores. Now the `key` supports any UTF8 + characters. + +- [#11405](https://github.com/emqx/emqx/pull/11405) Improve the error reason of the `date_to_unix_ts` to make more sense. + +## Bug Fixes + +- [#11279](https://github.com/emqx/emqx/pull/11279) Prevent client disconnected when sending large payloads with debug/trace logging is enabled. + +- [#11388](https://github.com/emqx/emqx/pull/11388) Increase `emqx_router_sup` restart intensity. + + The goal is to tolerate occasional crashes that can happen under relatively normal conditions + and don't seem critical to shutdown the whole app (emqx). + For example, mria write/delete call delegated from a replicant to a core node by `emqx_router_helper` may fail, + if the core node is being stopped / restarted / not ready. + +- [#11410](https://github.com/emqx/emqx/pull/11410) Reintroduce `cacerts` TLS client option as a deprecated option. + + This fixes issues found when trying to upgrade from 5.1.3 where that option is set in the configuration files or persisted in EMQX Operator settings.