|
|
@@ -18,7 +18,7 @@
|
|
|
-include_lib("emqx/include/logger.hrl").
|
|
|
|
|
|
-export([post_boot/0]).
|
|
|
--export([stop_apps/1, ensure_apps_started/0]).
|
|
|
+-export([stop_apps/0, ensure_apps_started/0]).
|
|
|
-export([sorted_reboot_apps/0]).
|
|
|
-export([start_autocluster/0]).
|
|
|
|
|
|
@@ -42,15 +42,16 @@ print_vsn() ->
|
|
|
|
|
|
|
|
|
start_autocluster() ->
|
|
|
- ekka:callback(prepare, fun ?MODULE:stop_apps/1),
|
|
|
- ekka:callback(reboot, fun ?MODULE:ensure_apps_started/0),
|
|
|
+ ekka:callback(stop, fun emqx_machine_boot:stop_apps/0),
|
|
|
+ ekka:callback(start, fun emqx_machine_boot:ensure_apps_started/0),
|
|
|
_ = ekka:autocluster(emqx), %% returns 'ok' or a pid or 'any()' as in spec
|
|
|
ok.
|
|
|
|
|
|
-stop_apps(Reason) ->
|
|
|
- ?SLOG(info, #{msg => "stopping_apps", reason => Reason}),
|
|
|
+stop_apps() ->
|
|
|
+ ?SLOG(notice, #{msg => "stopping_emqx_apps"}),
|
|
|
_ = emqx_alarm_handler:unload(),
|
|
|
- lists:foreach(fun stop_one_app/1, lists:reverse(sorted_reboot_apps())).
|
|
|
+ lists:foreach(fun stop_one_app/1, lists:reverse(sorted_reboot_apps())),
|
|
|
+ emqx_machine_sup:stop_cluster_rpc().
|
|
|
|
|
|
stop_one_app(App) ->
|
|
|
?SLOG(debug, #{msg => "stopping_app", app => App}),
|
|
|
@@ -64,8 +65,11 @@ stop_one_app(App) ->
|
|
|
reason => E})
|
|
|
end.
|
|
|
|
|
|
-
|
|
|
ensure_apps_started() ->
|
|
|
+ ?SLOG(notice, #{msg => "(re)starting_emqx_apps"}),
|
|
|
+ %% FIXME: Hack spawning the cluster RPC asynchronously to avoid a
|
|
|
+ %% deadlock somewhere in EMQ X startup
|
|
|
+ spawn_link(fun() -> emqx_machine_sup:start_cluster_rpc() end),
|
|
|
lists:foreach(fun start_one_app/1, sorted_reboot_apps()).
|
|
|
|
|
|
start_one_app(App) ->
|