From 6574fc4f14d2583a23eb66ba80aeb962d2f0af4c Mon Sep 17 00:00:00 2001 From: JianBo He Date: Wed, 11 Aug 2021 18:21:16 +0800 Subject: [PATCH] fix(exhook): set trap_exit flag --- apps/emqx_exhook/src/emqx_exhook_mngr.erl | 5 +++-- apps/emqx_exhook/src/emqx_exhook_sup.erl | 1 + apps/emqx_exhook/test/emqx_exhook_SUITE.erl | 13 ++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/emqx_exhook/src/emqx_exhook_mngr.erl b/apps/emqx_exhook/src/emqx_exhook_mngr.erl index ce375825f..e5796cd7e 100644 --- a/apps/emqx_exhook/src/emqx_exhook_mngr.erl +++ b/apps/emqx_exhook/src/emqx_exhook_mngr.erl @@ -101,6 +101,7 @@ call(Pid, Req) -> %%-------------------------------------------------------------------- init([Servers, AutoReconnect, ReqOpts]) -> + process_flag(trap_exit, true), %% XXX: Due to the ExHook Module in the enterprise, %% this process may start multiple times and they will share this table try @@ -182,11 +183,11 @@ handle_info({timeout, _Ref, {reload, Name}}, State) -> handle_info(_Info, State) -> {noreply, State}. -terminate(_Reason, State = #state{stopped = Stopped}) -> +terminate(_Reason, State = #state{running = Running}) -> _ = maps:fold(fun(Name, _, AccIn) -> {ok, NAccIn} = do_unload_server(Name, AccIn), NAccIn - end, State, Stopped), + end, State, Running), _ = unload_exhooks(), ok. diff --git a/apps/emqx_exhook/src/emqx_exhook_sup.erl b/apps/emqx_exhook/src/emqx_exhook_sup.erl index cb6cea635..6afed3d80 100644 --- a/apps/emqx_exhook/src/emqx_exhook_sup.erl +++ b/apps/emqx_exhook/src/emqx_exhook_sup.erl @@ -30,6 +30,7 @@ #{ id => Mod , start => {Mod, start_link, Args} , type => Type + , shutdown => 15000 } ). diff --git a/apps/emqx_exhook/test/emqx_exhook_SUITE.erl b/apps/emqx_exhook/test/emqx_exhook_SUITE.erl index bf5d6ac1f..52664f57a 100644 --- a/apps/emqx_exhook/test/emqx_exhook_SUITE.erl +++ b/apps/emqx_exhook/test/emqx_exhook_SUITE.erl @@ -53,15 +53,14 @@ end_per_suite(_Cfg) -> %%-------------------------------------------------------------------- t_noserver_nohook(_) -> - emqx_exhook:disable(<<"default">>), - ?assertEqual([], loaded_exhook_hookpoints()), - [#{name := Name} = Opts] = emqx_config:get([exhook, servers]), - ok = emqx_exhook:enable(Name, Opts), - ?assertNotEqual([], loaded_exhook_hookpoints()). + emqx_exhook:disable(default), + ?assertEqual([], ets:tab2list(emqx_hooks)), + ok = emqx_exhook:enable(default), + ?assertNotEqual([], ets:tab2list(emqx_hooks)). t_cli_list(_) -> meck_print(), - ?assertEqual( [[emqx_exhook_server:format(Svr) || Svr <- emqx_exhook:list()]] + ?assertEqual( [[emqx_exhook_server:format(emqx_exhook_mngr:server(Name)) || Name <- emqx_exhook:list()]] , emqx_exhook_cli:cli(["server", "list"]) ), unmeck_print(). @@ -70,7 +69,7 @@ t_cli_enable_disable(_) -> meck_print(), ?assertEqual([already_started], emqx_exhook_cli:cli(["server", "enable", "default"])), ?assertEqual(ok, emqx_exhook_cli:cli(["server", "disable", "default"])), - ?assertEqual([], emqx_exhook_cli:cli(["server", "list"])), + ?assertEqual([["name=default, hooks=#{}, active=false"]], emqx_exhook_cli:cli(["server", "list"])), ?assertEqual([not_running], emqx_exhook_cli:cli(["server", "disable", "default"])), ?assertEqual(ok, emqx_exhook_cli:cli(["server", "enable", "default"])),