diff --git a/apps/emqx_retainer/src/emqx_retainer_sup.erl b/apps/emqx_retainer/src/emqx_retainer_sup.erl index 3dadd4d6d..02ced41ef 100644 --- a/apps/emqx_retainer/src/emqx_retainer_sup.erl +++ b/apps/emqx_retainer/src/emqx_retainer_sup.erl @@ -37,6 +37,7 @@ ensure_worker_pool_started() -> _:_ -> ignore end. +-dialyzer({no_match, [init/1]}). init([Env]) -> Retainer = #{ id => retainer, diff --git a/changes/v4.4.17-en.md b/changes/v4.4.17-en.md index 620ad6e38..16f235e3a 100644 --- a/changes/v4.4.17-en.md +++ b/changes/v4.4.17-en.md @@ -26,4 +26,10 @@ - Fix that `Erlang distribution` can't use TLS [#9981](https://github.com/emqx/emqx/pull/9981). About `Erlang distribution`, See [here](https://www.emqx.io/docs/en/v4.4/advanced/cluster.html#distributed-erlang) for details. -- Fixed MQTT bridge TLS connection could not verify wildcard certificate from peer[#10094](https://github.com/emqx/emqx/pull/10094). +- Fixed MQTT bridge TLS connection could not verify wildcard certificate from peer [#10094](https://github.com/emqx/emqx/pull/10094). + +- Fixed the problem that EMQX could not timely clear the disconnected MQTT connection information due to a large number of retained messages [#10189](https://github.com/emqx/emqx/pull/10189). + Before this fix, the `emqx_retainer` plugin and the connection cleanup process of emqx shared the same process pool. + Therefore, if the process pool was blocked by a large number of retain messages, many disconnected MQTT connections would not be cleaned up in time. + For more details, see [#9409](https://github.com/emqx/emqx/issues/9409). + In this fix, we created a separate process pool for the `emqx_retainer` plugin to avoid this problem. diff --git a/changes/v4.4.17-zh.md b/changes/v4.4.17-zh.md index df07cd348..c21a8fd8b 100644 --- a/changes/v4.4.17-zh.md +++ b/changes/v4.4.17-zh.md @@ -25,4 +25,10 @@ - 修复 `Erlang distribution` 无法使用 TLS 的问题 [#9981](https://github.com/emqx/emqx/pull/9981)。 关于 `Erlang distribution`, 详见 [这里](https://www.emqx.io/docs/zh/v4.4/advanced/cluster.html)。 -- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书[#10094](https://github.com/emqx/emqx/pull/10094)。 +- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书 [#10094](https://github.com/emqx/emqx/pull/10094)。 + +- 修复由于大量 retain 消息导致 EMQX 无法及时清除已掉线的 MQTT 连接信息的问题。[#10189](https://github.com/emqx/emqx/pull/10189)。 + 在此修复之前,`emqx_retainer` 插件和 emqx 的连接信息清理过程共用了同一个进程池,所以 + 如果该进程池被大量的 retain 消息下发任务阻塞时,许多已经掉线的 MQTT 连接将得不到及时清理。 + 问题详情见 [#9409](https://github.com/emqx/emqx/issues/9409)。 + 在此修复中,我们给 `emqx_retainer` 插件创建了单独的进程池,从而避免了该问题。