diff --git a/apps/emqx/src/emqx.erl b/apps/emqx/src/emqx.erl index bd5bb083d..ed246cff5 100644 --- a/apps/emqx/src/emqx.erl +++ b/apps/emqx/src/emqx.erl @@ -49,10 +49,6 @@ %% Hooks API -export([ - hook/2, - hook/3, - hook/4, - unhook/2, run_hook/2, run_fold_hook/3 ]). @@ -160,31 +156,6 @@ subscribed(SubId, Topic) when is_atom(SubId); is_binary(SubId) -> %%-------------------------------------------------------------------- %% Hooks API %%-------------------------------------------------------------------- - --spec hook(emqx_hooks:hookpoint(), emqx_hooks:action()) -> ok | {error, already_exists}. -hook(HookPoint, Action) -> - emqx_hooks:add(HookPoint, Action). - --spec hook( - emqx_hooks:hookpoint(), - emqx_hooks:action(), - emqx_hooks:filter() | integer() | list() -) -> - ok | {error, already_exists}. -hook(HookPoint, Action, Priority) when is_integer(Priority) -> - emqx_hooks:add(HookPoint, Action, Priority); -hook(HookPoint, Action, {_M, _F, _A} = Filter) -> - emqx_hooks:add(HookPoint, Action, Filter). - --spec hook(emqx_hooks:hookpoint(), emqx_hooks:action(), emqx_hooks:filter(), integer()) -> - ok | {error, already_exists}. -hook(HookPoint, Action, Filter, Priority) -> - emqx_hooks:add(HookPoint, Action, Filter, Priority). - --spec unhook(emqx_hooks:hookpoint(), emqx_hooks:action() | {module(), atom()}) -> ok. -unhook(HookPoint, Action) -> - emqx_hooks:del(HookPoint, Action). - -spec run_hook(emqx_hooks:hookpoint(), list(any())) -> ok | stop. run_hook(HookPoint, Args) -> emqx_hooks:run(HookPoint, Args). diff --git a/apps/emqx/src/emqx_hooks.erl b/apps/emqx/src/emqx_hooks.erl index 632257c4f..b07353302 100644 --- a/apps/emqx/src/emqx_hooks.erl +++ b/apps/emqx/src/emqx_hooks.erl @@ -29,10 +29,8 @@ %% Hooks API -export([ - add/2, add/3, add/4, - put/2, put/3, put/4, del/2, @@ -121,44 +119,34 @@ callback_priority(#callback{priority = P}) -> P. %% Hooks API %%-------------------------------------------------------------------- -%% @doc `add/2,3,4` add a new hook, returns 'already_exists' if the hook exists. --spec add(hookpoint(), action() | callback()) -> ok_or_error(already_exists). -add(HookPoint, Callback) when is_record(Callback, callback) -> - gen_server:call(?SERVER, {add, HookPoint, Callback}, infinity); -add(HookPoint, Action) when is_function(Action); is_tuple(Action) -> - add(HookPoint, #callback{action = Action, priority = 0}). - --spec add(hookpoint(), action(), filter() | integer() | list()) -> +%% @doc `add/3,4` add a new hook, returns 'already_exists' if the hook exists. +-spec add(hookpoint(), action(), integer()) -> ok_or_error(already_exists). -add(HookPoint, Action, {_M, _F, _A} = Filter) -> - add(HookPoint, #callback{action = Action, filter = Filter, priority = 0}); add(HookPoint, Action, Priority) when is_integer(Priority) -> - add(HookPoint, #callback{action = Action, priority = Priority}). + do_add(HookPoint, #callback{action = Action, priority = Priority}). --spec add(hookpoint(), action(), filter(), integer()) -> +-spec add(hookpoint(), action(), integer(), filter()) -> ok_or_error(already_exists). -add(HookPoint, Action, Filter, Priority) when is_integer(Priority) -> - add(HookPoint, #callback{action = Action, filter = Filter, priority = Priority}). +add(HookPoint, Action, Priority, Filter) when is_integer(Priority) -> + do_add(HookPoint, #callback{action = Action, filter = Filter, priority = Priority}). -%% @doc `put/2,3,4` updates the existing hook, add it if not exists. --spec put(hookpoint(), action() | callback()) -> ok. -put(HookPoint, Callback) when is_record(Callback, callback) -> - case add(HookPoint, Callback) of +do_add(HookPoint, Callback) -> + gen_server:call(?SERVER, {add, HookPoint, Callback}, infinity). + +%% @doc `put/3,4` updates the existing hook, add it if not exists. +-spec put(hookpoint(), action(), integer()) -> ok. +put(HookPoint, Action, Priority) when is_integer(Priority) -> + do_put(HookPoint, #callback{action = Action, priority = Priority}). + +-spec put(hookpoint(), action(), integer(), filter()) -> ok. +put(HookPoint, Action, Priority, Filter) when is_integer(Priority) -> + do_put(HookPoint, #callback{action = Action, filter = Filter, priority = Priority}). + +do_put(HookPoint, Callback) -> + case do_add(HookPoint, Callback) of ok -> ok; {error, already_exists} -> gen_server:call(?SERVER, {put, HookPoint, Callback}, infinity) - end; -put(HookPoint, Action) when is_function(Action); is_tuple(Action) -> - ?MODULE:put(HookPoint, #callback{action = Action, priority = 0}). - --spec put(hookpoint(), action(), filter() | integer() | list()) -> ok. -put(HookPoint, Action, {_M, _F, _A} = Filter) -> - ?MODULE:put(HookPoint, #callback{action = Action, filter = Filter, priority = 0}); -put(HookPoint, Action, Priority) when is_integer(Priority) -> - ?MODULE:put(HookPoint, #callback{action = Action, priority = Priority}). - --spec put(hookpoint(), action(), filter(), integer()) -> ok. -put(HookPoint, Action, Filter, Priority) when is_integer(Priority) -> - ?MODULE:put(HookPoint, #callback{action = Action, filter = Filter, priority = Priority}). + end. %% @doc Unregister a callback. -spec del(hookpoint(), action() | {module(), atom()}) -> ok. diff --git a/apps/emqx/test/emqx_SUITE.erl b/apps/emqx/test/emqx_SUITE.erl index 02e1c8f29..3eb4bf424 100644 --- a/apps/emqx/test/emqx_SUITE.erl +++ b/apps/emqx/test/emqx_SUITE.erl @@ -95,52 +95,54 @@ t_emqx_pubsub_api(_) -> ?assertEqual([], emqx:topics()). t_hook_unhook(_) -> - ok = emqx:hook(test_hook, {?MODULE, hook_fun1, []}), - ok = emqx:hook(test_hook, {?MODULE, hook_fun2, []}), + ok = emqx_hooks:add(test_hook, {?MODULE, hook_fun1, []}, 0), + ok = emqx_hooks:add(test_hook, {?MODULE, hook_fun2, []}, 0), ?assertEqual( {error, already_exists}, - emqx:hook(test_hook, {?MODULE, hook_fun2, []}) + emqx_hooks:add(test_hook, {?MODULE, hook_fun2, []}, 0) ), - ok = emqx:unhook(test_hook, {?MODULE, hook_fun1}), - ok = emqx:unhook(test_hook, {?MODULE, hook_fun2}), + ok = emqx_hooks:del(test_hook, {?MODULE, hook_fun1}), + ok = emqx_hooks:del(test_hook, {?MODULE, hook_fun2}), - ok = emqx:hook(emqx_hook, {?MODULE, hook_fun8, []}, 8), - ok = emqx:hook(emqx_hook, {?MODULE, hook_fun2, []}, 2), - ok = emqx:hook(emqx_hook, {?MODULE, hook_fun10, []}, 10), - ok = emqx:hook(emqx_hook, {?MODULE, hook_fun9, []}, 9), - ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun2, []}), - ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun8, []}), - ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun9, []}), - ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun10, []}). + ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun8, []}, 8), + ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun2, []}, 2), + ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun10, []}, 10), + ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun9, []}, 9), + ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun2, []}), + ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun8, []}), + ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun9, []}), + ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun10, []}). t_run_hook(_) -> - ok = emqx:hook(foldl_hook, {?MODULE, hook_fun3, [init]}), - ok = emqx:hook(foldl_hook, {?MODULE, hook_fun4, [init]}), - ok = emqx:hook(foldl_hook, {?MODULE, hook_fun5, [init]}), + ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun3, [init]}, 0), + ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun4, [init]}, 0), + ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun5, [init]}, 0), [r5, r4] = emqx:run_fold_hook(foldl_hook, [arg1, arg2], []), [] = emqx:run_fold_hook(unknown_hook, [], []), - ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun9, []}), - ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun10, []}), + ok = emqx_hooks:add(foldl_hook2, {?MODULE, hook_fun9, []}, 0), + ok = emqx_hooks:add(foldl_hook2, {?MODULE, hook_fun10, []}, 0), [r10] = emqx:run_fold_hook(foldl_hook2, [arg], []), - ok = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}), - {error, already_exists} = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}), - ok = emqx:hook(foreach_hook, {?MODULE, hook_fun7, [initArg]}), - ok = emqx:hook(foreach_hook, {?MODULE, hook_fun8, [initArg]}), + ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun6, [initArg]}, 0), + {error, already_exists} = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun6, [initArg]}, 0), + ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun7, [initArg]}, 0), + ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun8, [initArg]}, 0), ok = emqx:run_hook(foreach_hook, [arg]), - ok = emqx:hook(foreach_filter1_hook, {?MODULE, hook_fun1, []}, {?MODULE, hook_filter1, []}, 0), + ok = emqx_hooks:add( + foreach_filter1_hook, {?MODULE, hook_fun1, []}, 0, {?MODULE, hook_filter1, []} + ), %% filter passed ?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg])), %% filter failed ?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg1])), - ok = emqx:hook( - foldl_filter2_hook, {?MODULE, hook_fun2, []}, {?MODULE, hook_filter2, [init_arg]} + ok = emqx_hooks:add( + foldl_filter2_hook, {?MODULE, hook_fun2, []}, 0, {?MODULE, hook_filter2, [init_arg]} ), - ok = emqx:hook( - foldl_filter2_hook, {?MODULE, hook_fun2_1, []}, {?MODULE, hook_filter2_1, [init_arg]} + ok = emqx_hooks:add( + foldl_filter2_hook, {?MODULE, hook_fun2_1, []}, 0, {?MODULE, hook_filter2_1, [init_arg]} ), ?assertEqual(3, emqx:run_fold_hook(foldl_filter2_hook, [arg], 1)), ?assertEqual(2, emqx:run_fold_hook(foldl_filter2_hook, [arg1], 1)). diff --git a/apps/emqx/test/emqx_hooks_SUITE.erl b/apps/emqx/test/emqx_hooks_SUITE.erl index e6c14d3d4..3c516fcfe 100644 --- a/apps/emqx/test/emqx_hooks_SUITE.erl +++ b/apps/emqx/test/emqx_hooks_SUITE.erl @@ -66,7 +66,7 @@ add_hook_order_prop() -> hooks(), try {ok, _} = emqx_hooks:start_link(), - [ok = emqx:hook(prop_hook, {M, F, []}, Prio) || {Prio, M, F} <- Hooks], + [ok = emqx_hooks:add(prop_hook, {M, F, []}, Prio) || {Prio, M, F} <- Hooks], Callbacks = emqx_hooks:lookup(prop_hook), Order = [{Prio, M, F} || {callback, {M, F, _}, _Filter, Prio} <- Callbacks], ?assertEqual( @@ -93,11 +93,11 @@ hooks() -> t_add_put_del_hook(_) -> {ok, _} = emqx_hooks:start_link(), - ok = emqx:hook(test_hook, {?MODULE, hook_fun1, []}), - ok = emqx:hook(test_hook, {?MODULE, hook_fun2, []}), + ok = emqx_hooks:add(test_hook, {?MODULE, hook_fun1, []}, 0), + ok = emqx_hooks:add(test_hook, {?MODULE, hook_fun2, []}, 0), ?assertEqual( {error, already_exists}, - emqx:hook(test_hook, {?MODULE, hook_fun2, []}) + emqx_hooks:add(test_hook, {?MODULE, hook_fun2, []}, 0) ), Callbacks0 = [ {callback, {?MODULE, hook_fun1, []}, undefined, 0}, @@ -105,23 +105,23 @@ t_add_put_del_hook(_) -> ], ?assertEqual(Callbacks0, emqx_hooks:lookup(test_hook)), - ok = emqx_hooks:put(test_hook, {?MODULE, hook_fun1, [test]}), - ok = emqx_hooks:put(test_hook, {?MODULE, hook_fun2, [test]}), + ok = emqx_hooks:put(test_hook, {?MODULE, hook_fun1, [test]}, 0), + ok = emqx_hooks:put(test_hook, {?MODULE, hook_fun2, [test]}, 0), Callbacks1 = [ {callback, {?MODULE, hook_fun1, [test]}, undefined, 0}, {callback, {?MODULE, hook_fun2, [test]}, undefined, 0} ], ?assertEqual(Callbacks1, emqx_hooks:lookup(test_hook)), - ok = emqx:unhook(test_hook, {?MODULE, hook_fun1}), - ok = emqx:unhook(test_hook, {?MODULE, hook_fun2}), + ok = emqx_hooks:del(test_hook, {?MODULE, hook_fun1}), + ok = emqx_hooks:del(test_hook, {?MODULE, hook_fun2}), timer:sleep(200), ?assertEqual([], emqx_hooks:lookup(test_hook)), - ok = emqx:hook(emqx_hook, {?MODULE, hook_fun8, []}, 8), - ok = emqx:hook(emqx_hook, {?MODULE, hook_fun2, []}, 2), - ok = emqx:hook(emqx_hook, {?MODULE, hook_fun10, []}, 10), - ok = emqx:hook(emqx_hook, {?MODULE, hook_fun9, []}, 9), + ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun8, []}, 8), + ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun2, []}, 2), + ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun10, []}, 10), + ok = emqx_hooks:add(emqx_hook, {?MODULE, hook_fun9, []}, 9), Callbacks2 = [ {callback, {?MODULE, hook_fun10, []}, undefined, 10}, {callback, {?MODULE, hook_fun9, []}, undefined, 9}, @@ -142,43 +142,45 @@ t_add_put_del_hook(_) -> ], ?assertEqual(Callbacks3, emqx_hooks:lookup(emqx_hook)), - ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun2, [test]}), - ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun8, [test]}), - ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun9, [test]}), - ok = emqx:unhook(emqx_hook, {?MODULE, hook_fun10, [test]}), + ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun2, [test]}), + ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun8, [test]}), + ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun9, [test]}), + ok = emqx_hooks:del(emqx_hook, {?MODULE, hook_fun10, [test]}), timer:sleep(200), ?assertEqual([], emqx_hooks:lookup(emqx_hook)). t_run_hooks(_) -> {ok, _} = emqx_hooks:start_link(), - ok = emqx:hook(foldl_hook, {?MODULE, hook_fun3, [init]}), - ok = emqx:hook(foldl_hook, {?MODULE, hook_fun4, [init]}), - ok = emqx:hook(foldl_hook, {?MODULE, hook_fun5, [init]}), + ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun3, [init]}, 0), + ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun4, [init]}, 0), + ok = emqx_hooks:add(foldl_hook, {?MODULE, hook_fun5, [init]}, 0), [r5, r4] = emqx:run_fold_hook(foldl_hook, [arg1, arg2], []), [] = emqx:run_fold_hook(unknown_hook, [], []), - ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun9, []}), - ok = emqx:hook(foldl_hook2, {?MODULE, hook_fun10, []}), + ok = emqx_hooks:add(foldl_hook2, {?MODULE, hook_fun9, []}, 0), + ok = emqx_hooks:add(foldl_hook2, {?MODULE, hook_fun10, []}, 0), %% Note: 10 is _less_ than 9 per lexicographic order [r10] = emqx:run_fold_hook(foldl_hook2, [arg], []), - ok = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}), - {error, already_exists} = emqx:hook(foreach_hook, {?MODULE, hook_fun6, [initArg]}), - ok = emqx:hook(foreach_hook, {?MODULE, hook_fun7, [initArg]}), - ok = emqx:hook(foreach_hook, {?MODULE, hook_fun8, [initArg]}), + ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun6, [initArg]}, 0), + {error, already_exists} = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun6, [initArg]}, 0), + ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun7, [initArg]}, 0), + ok = emqx_hooks:add(foreach_hook, {?MODULE, hook_fun8, [initArg]}, 0), ok = emqx:run_hook(foreach_hook, [arg]), - ok = emqx:hook(foreach_filter1_hook, {?MODULE, hook_fun1, []}, {?MODULE, hook_filter1, []}, 0), + ok = emqx_hooks:add( + foreach_filter1_hook, {?MODULE, hook_fun1, []}, 0, {?MODULE, hook_filter1, []} + ), %% filter passed ?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg])), %% filter failed ?assertEqual(ok, emqx:run_hook(foreach_filter1_hook, [arg1])), - ok = emqx:hook( - foldl_filter2_hook, {?MODULE, hook_fun2, []}, {?MODULE, hook_filter2, [init_arg]} + ok = emqx_hooks:add( + foldl_filter2_hook, {?MODULE, hook_fun2, []}, 0, {?MODULE, hook_filter2, [init_arg]} ), - ok = emqx:hook( - foldl_filter2_hook, {?MODULE, hook_fun2_1, []}, {?MODULE, hook_filter2_1, [init_arg]} + ok = emqx_hooks:add( + foldl_filter2_hook, {?MODULE, hook_fun2_1, []}, 0, {?MODULE, hook_filter2_1, [init_arg]} ), ?assertEqual(3, emqx:run_fold_hook(foldl_filter2_hook, [arg], 1)), ?assertEqual(2, emqx:run_fold_hook(foldl_filter2_hook, [arg1], 1)). diff --git a/apps/emqx_gateway/test/emqx_coap_SUITE.erl b/apps/emqx_gateway/test/emqx_coap_SUITE.erl index 672783865..127666c3a 100644 --- a/apps/emqx_gateway/test/emqx_coap_SUITE.erl +++ b/apps/emqx_gateway/test/emqx_coap_SUITE.erl @@ -330,8 +330,8 @@ t_clients_get_subscription_api(_) -> t_on_offline_event(_) -> Fun = fun(Channel) -> - emqx_hooks:add('client.connected', {emqx_sys, on_client_connected, []}), - emqx_hooks:add('client.disconnected', {emqx_sys, on_client_disconnected, []}), + emqx_hooks:add('client.connected', {emqx_sys, on_client_connected, []}, 1000), + emqx_hooks:add('client.disconnected', {emqx_sys, on_client_disconnected, []}, 1000), ConnectedSub = <<"$SYS/brokers/+/gateway/coap/clients/+/connected">>, emqx_broker:subscribe(ConnectedSub), diff --git a/apps/emqx_gateway/test/emqx_exproto_SUITE.erl b/apps/emqx_gateway/test/emqx_exproto_SUITE.erl index 9e1c3e6e9..8569a5567 100644 --- a/apps/emqx_gateway/test/emqx_exproto_SUITE.erl +++ b/apps/emqx_gateway/test/emqx_exproto_SUITE.erl @@ -19,6 +19,8 @@ -compile(export_all). -compile(nowarn_export_all). +-include_lib("emqx/include/emqx_hooks.hrl"). + -import( emqx_exproto_echo_svr, [ @@ -263,8 +265,8 @@ t_hook_connected_disconnected(Cfg) -> ConnAckBin = frame_connack(0), Parent = self(), - emqx:hook('client.connected', {?MODULE, hook_fun1, [Parent]}), - emqx:hook('client.disconnected', {?MODULE, hook_fun2, [Parent]}), + emqx_hooks:add('client.connected', {?MODULE, hook_fun1, [Parent]}, 1000), + emqx_hooks:add('client.disconnected', {?MODULE, hook_fun2, [Parent]}, 1000), send(Sock, ConnBin), {ok, ConnAckBin} = recv(Sock, 5000), @@ -288,8 +290,8 @@ t_hook_connected_disconnected(Cfg) -> begin {error, closed} = recv(Sock, 5000) end, - emqx:unhook('client.connected', {?MODULE, hook_fun1}), - emqx:unhook('client.disconnected', {?MODULE, hook_fun2}). + emqx_hooks:del('client.connected', {?MODULE, hook_fun1}), + emqx_hooks:del('client.disconnected', {?MODULE, hook_fun2}). t_hook_session_subscribed_unsubscribed(Cfg) -> SockType = proplists:get_value(listener_type, Cfg), @@ -309,8 +311,8 @@ t_hook_session_subscribed_unsubscribed(Cfg) -> {ok, ConnAckBin} = recv(Sock, 5000), Parent = self(), - emqx:hook('session.subscribed', {?MODULE, hook_fun3, [Parent]}), - emqx:hook('session.unsubscribed', {?MODULE, hook_fun4, [Parent]}), + emqx_hooks:add('session.subscribed', {?MODULE, hook_fun3, [Parent]}, 1000), + emqx_hooks:add('session.unsubscribed', {?MODULE, hook_fun4, [Parent]}, 1000), SubBin = frame_subscribe(<<"t/#">>, 1), SubAckBin = frame_suback(0), @@ -337,8 +339,8 @@ t_hook_session_subscribed_unsubscribed(Cfg) -> end, close(Sock), - emqx:unhook('session.subscribed', {?MODULE, hook_fun3}), - emqx:unhook('session.unsubscribed', {?MODULE, hook_fun4}). + emqx_hooks:del('session.subscribed', {?MODULE, hook_fun3}), + emqx_hooks:del('session.unsubscribed', {?MODULE, hook_fun4}). t_hook_message_delivered(Cfg) -> SockType = proplists:get_value(listener_type, Cfg), @@ -363,14 +365,14 @@ t_hook_message_delivered(Cfg) -> send(Sock, SubBin), {ok, SubAckBin} = recv(Sock, 5000), - emqx:hook('message.delivered', {?MODULE, hook_fun5, []}), + emqx_hooks:add('message.delivered', {?MODULE, hook_fun5, []}, 1000), emqx:publish(emqx_message:make(<<"t/dn">>, <<"1">>)), PubBin1 = frame_publish(<<"t/dn">>, 0, <<"2">>), {ok, PubBin1} = recv(Sock, 5000), close(Sock), - emqx:unhook('message.delivered', {?MODULE, hook_fun5}). + emqx_hooks:del('message.delivered', {?MODULE, hook_fun5}). %%-------------------------------------------------------------------- %% Utils diff --git a/lib-ee/emqx_license/src/emqx_license.erl b/lib-ee/emqx_license/src/emqx_license.erl index c5fc5643e..787a8b283 100644 --- a/lib-ee/emqx_license/src/emqx_license.erl +++ b/lib-ee/emqx_license/src/emqx_license.erl @@ -27,6 +27,11 @@ -define(CONF_KEY_PATH, [license]). +%% Give the license app the highest priority. +%% We don't define it in the emqx_hooks.hrl becasue that is an opensource code +%% and can be changed by the communitiy. +-define(HP_LICENSE, 2000). + %%------------------------------------------------------------------------------ %% API %%------------------------------------------------------------------------------ @@ -114,7 +119,7 @@ post_config_update(_Path, _Cmd, NewConf, _Old, _AppEnvs) -> %%------------------------------------------------------------------------------ add_license_hook() -> - ok = emqx_hooks:put('client.connect', {?MODULE, check, []}). + ok = emqx_hooks:put('client.connect', {?MODULE, check, []}, ?HP_LICENSE). del_license_hook() -> _ = emqx_hooks:del('client.connect', {?MODULE, check, []}),