From 86d8dd2fb6b67e905c5e520a17184bcf862e0f2d Mon Sep 17 00:00:00 2001 From: JianBo He Date: Tue, 19 Apr 2022 10:03:40 +0800 Subject: [PATCH] chore(sys): improve diff_hooks implement --- apps/emqx/src/emqx_sys.erl | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/apps/emqx/src/emqx_sys.erl b/apps/emqx/src/emqx_sys.erl index 43a4569db..ad9b23daa 100644 --- a/apps/emqx/src/emqx_sys.erl +++ b/apps/emqx/src/emqx_sys.erl @@ -147,23 +147,24 @@ post_config_update(_, _Req, NewSysConf, OldSysConf, _AppEnvs) -> load_event_hooks(Added). diff_hooks(NewSysConf, OldSysConf) -> - NewEvents = maps:get(sys_event_messages, NewSysConf, #{}), - OldEvents = maps:get(sys_event_messages, OldSysConf, #{}), - maps:fold( - fun(K, V, {Acc1, Acc2}) -> - case V =:= maps:get(K, OldEvents, false) of - true -> - {Acc1, Acc2}; - false -> - case V of - true -> {[{K, V} | Acc1], [Acc2]}; - false -> {Acc1, [{K, V} | Acc2]} - end - end - end, - {[], []}, - NewEvents - ). + NewEvents = maps:to_list(maps:get(sys_event_messages, NewSysConf, #{})), + OldEvents = maps:to_list(maps:get(sys_event_messages, OldSysConf, #{})), + diff_hooks(NewEvents, OldEvents, [], []). + +diff_hooks([], [], Added, Removed) -> + {lists:reverse(Added), lists:reverse(Removed)}; +diff_hooks([H | T1], [H | T2], Added, Removed) -> + diff_hooks(T1, T2, Added, Removed); +diff_hooks( + [New = {EventName, NewEnable} | T1], + [Old = {EventName, OldEnable} | T2], + Added, + Removed +) -> + case {NewEnable, OldEnable} of + {true, false} -> diff_hooks(T1, T2, [New | Added], Removed); + {false, true} -> diff_hooks(T1, T2, Added, [Old | Removed]) + end. %%-------------------------------------------------------------------- %% gen_server callbacks