Просмотр исходного кода

fix(exhook): set trap_exit flag

JianBo He 4 лет назад
Родитель
Сommit
6574fc4f14

+ 3 - 2
apps/emqx_exhook/src/emqx_exhook_mngr.erl

@@ -101,6 +101,7 @@ call(Pid, Req) ->
 %%--------------------------------------------------------------------
 %%--------------------------------------------------------------------
 
 
 init([Servers, AutoReconnect, ReqOpts]) ->
 init([Servers, AutoReconnect, ReqOpts]) ->
+    process_flag(trap_exit, true),
     %% XXX: Due to the ExHook Module in the enterprise,
     %% XXX: Due to the ExHook Module in the enterprise,
     %% this process may start multiple times and they will share this table
     %% this process may start multiple times and they will share this table
     try
     try
@@ -182,11 +183,11 @@ handle_info({timeout, _Ref, {reload, Name}}, State) ->
 handle_info(_Info, State) ->
 handle_info(_Info, State) ->
     {noreply, State}.
     {noreply, State}.
 
 
-terminate(_Reason, State = #state{stopped = Stopped}) ->
+terminate(_Reason, State = #state{running = Running}) ->
     _ = maps:fold(fun(Name, _, AccIn) ->
     _ = maps:fold(fun(Name, _, AccIn) ->
             {ok, NAccIn} = do_unload_server(Name, AccIn),
             {ok, NAccIn} = do_unload_server(Name, AccIn),
             NAccIn
             NAccIn
-        end, State, Stopped),
+        end, State, Running),
     _ = unload_exhooks(),
     _ = unload_exhooks(),
     ok.
     ok.
 
 

+ 1 - 0
apps/emqx_exhook/src/emqx_exhook_sup.erl

@@ -30,6 +30,7 @@
             #{ id => Mod
             #{ id => Mod
              , start => {Mod, start_link, Args}
              , start => {Mod, start_link, Args}
              , type => Type
              , type => Type
+             , shutdown => 15000
              }
              }
        ).
        ).
 
 

+ 6 - 7
apps/emqx_exhook/test/emqx_exhook_SUITE.erl

@@ -53,15 +53,14 @@ end_per_suite(_Cfg) ->
 %%--------------------------------------------------------------------
 %%--------------------------------------------------------------------
 
 
 t_noserver_nohook(_) ->
 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(_) ->
 t_cli_list(_) ->
     meck_print(),
     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"])
                 , emqx_exhook_cli:cli(["server", "list"])
                 ),
                 ),
     unmeck_print().
     unmeck_print().
@@ -70,7 +69,7 @@ t_cli_enable_disable(_) ->
     meck_print(),
     meck_print(),
     ?assertEqual([already_started], emqx_exhook_cli:cli(["server", "enable", "default"])),
     ?assertEqual([already_started], emqx_exhook_cli:cli(["server", "enable", "default"])),
     ?assertEqual(ok, emqx_exhook_cli:cli(["server", "disable", "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([not_running], emqx_exhook_cli:cli(["server", "disable", "default"])),
     ?assertEqual(ok, emqx_exhook_cli:cli(["server", "enable", "default"])),
     ?assertEqual(ok, emqx_exhook_cli:cli(["server", "enable", "default"])),