From 1f4869fba3b1782faffca4bcbf4138b05fd54274 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Mon, 6 Feb 2023 21:22:10 +0800 Subject: [PATCH 1/3] fix: the application stop order is wrong after ekka:join/1 --- src/emqx.erl | 58 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/src/emqx.erl b/src/emqx.erl index a9a378080..85d154023 100644 --- a/src/emqx.erl +++ b/src/emqx.erl @@ -65,6 +65,8 @@ %% Troubleshooting -export([ set_debug_secret/1 + , default_started_applications/0 + , expand_apps/1 ]). -define(APP, ?MODULE). @@ -252,14 +254,6 @@ is_application_running(App) -> StartedApps = proplists:get_value(started, application:info()), proplists:is_defined(App, StartedApps). --ifdef(EMQX_ENTERPRISE). -default_started_applications() -> - [gproc, esockd, ranch, cowboy, ekka, emqx]. --else. -default_started_applications() -> - [gproc, esockd, ranch, cowboy, ekka, emqx, emqx_modules]. --endif. - -ifdef(EMQX_ENTERPRISE). on_reboot() -> try @@ -290,6 +284,54 @@ on_shutdown(_) -> %%-------------------------------------------------------------------- %% Internal functions %%-------------------------------------------------------------------- +-ifdef(EMQX_ENTERPRISE). +applications_need_restart() -> + [gproc, esockd, ranch, cowboy, ekka, emqx]. +-else. +applications_need_restart() -> + [gproc, esockd, ranch, cowboy, ekka, emqx, emqx_modules]. +-endif. + +-define(PK_START_APPS, {?MODULE, default_started_applications}). +default_started_applications() -> + case persistent_term:get(?PK_START_APPS, undefined) of + undefined -> + AppNames = expand_apps(applications_need_restart()), + ok = persistent_term:put(?PK_START_APPS, AppNames), + AppNames; + AppNames -> + AppNames + end. + +%% expand the application list with dependent apps. +expand_apps(AppNames) -> + AllApps = application:which_applications(), + remove_duplicated( + lists:flatmap(fun(AppName) -> + expand_an_app(AppName, AllApps) + end, AppNames)). + +expand_an_app(AppNameA, AllApps) -> + expand_an_app(AppNameA, AllApps, [AppNameA]). + +expand_an_app(_AppNameA, [], Acc) -> + Acc; +expand_an_app(AppNameA, [{AppNameB, _Descr, _Vsn} | AllApps], Acc) -> + {ok, DepAppNames} = application:get_key(AppNameB, applications), + case lists:member(AppNameA, DepAppNames) of + true -> %% AppNameB depends on AppNameA + NewAcc = Acc ++ expand_an_app(AppNameB, AllApps), + expand_an_app(AppNameA, AllApps, NewAcc); + false -> + expand_an_app(AppNameA, AllApps, Acc) + end. + +remove_duplicated([]) -> []; +remove_duplicated([E | Elems]) -> + case lists:member(E, Elems) of + true -> remove_duplicated(Elems); + false -> [E] ++ remove_duplicated(Elems) + end. reload_config(ConfFile) -> {ok, [Conf]} = file:consult(ConfFile), From 79c8b69e362c4ad4f7bd2cb619e24a90e38ece43 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Mon, 6 Feb 2023 21:42:44 +0800 Subject: [PATCH 2/3] chore: add change logs --- changes/v4.4.15-en.md | 2 ++ changes/v4.4.15-zh.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/changes/v4.4.15-en.md b/changes/v4.4.15-en.md index a0f319ccd..35e170b27 100644 --- a/changes/v4.4.15-en.md +++ b/changes/v4.4.15-en.md @@ -31,3 +31,5 @@ - fix the emqx reports `{case_clause,{error,closed}}` error log message when websocket connections interrupted [emqx/cowboy#8](https://github.com/emqx/cowboy/pull/8). - fix sometimes the rules cannot be enabled automatically after emqx is restarted [#9911](https://github.com/emqx/emqx/pull/9911). + +- fix the `{badarg,[{ets,lookup,[gproc,{shared, ...` error logs during shutdown [#9919](https://github.com/emqx/emqx/pull/9919). diff --git a/changes/v4.4.15-zh.md b/changes/v4.4.15-zh.md index 169af461e..dc8a14f82 100644 --- a/changes/v4.4.15-zh.md +++ b/changes/v4.4.15-zh.md @@ -30,3 +30,5 @@ - 修复 Websocket 连接中断时日志报 `{case_clause,{error,closed}}` 错误的问题 [emqx/cowboy#8](https://github.com/emqx/cowboy/pull/8)。 - 修复某些情况下,重启 emqx 后规则无法自动启用的问题 [#9911](https://github.com/emqx/emqx/pull/9911)。 + +- 修复停止 emqx 的时候,日志出现 `{badarg,[{ets,lookup,[gproc,{shared, ...` 错误的问题 [#9919](https://github.com/emqx/emqx/pull/9919)。 From a75e8b93c06bce280479e7a4f309bdb8186f65f2 Mon Sep 17 00:00:00 2001 From: Shawn <506895667@qq.com> Date: Mon, 6 Feb 2023 21:44:51 +0800 Subject: [PATCH 3/3] chore: update src/emqx.appup.src --- src/emqx.appup.src | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 1770bce7c..ac216c43e 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -8,6 +8,7 @@ {load_module,emqx_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, + {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}]}, @@ -20,6 +21,7 @@ {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, + {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.12", @@ -31,6 +33,7 @@ {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, + {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.11", @@ -41,6 +44,7 @@ {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, + {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_misc,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, @@ -467,6 +471,7 @@ {load_module,emqx_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, + {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}]}, @@ -479,6 +484,7 @@ {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, + {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.12", @@ -490,6 +496,7 @@ {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, + {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.11", @@ -499,6 +506,7 @@ {load_module,emqx_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_ws_connection,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, + {load_module,emqx,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_misc,brutal_purge,soft_purge,[]},