From 5a042645e2056b261354c09efd78eb49a1317a48 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Mon, 21 Mar 2022 10:30:12 +0800 Subject: [PATCH 1/3] fix: make all traces stopped when disable emqx_trace_module --- CHANGES-4.4.md | 1 + apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl | 6 ++++++ .../src/emqx_trace/emqx_trace_api.erl | 13 ++++++++----- src/emqx.appup.src | 5 +++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/CHANGES-4.4.md b/CHANGES-4.4.md index d3889309c..59c62d9c5 100644 --- a/CHANGES-4.4.md +++ b/CHANGES-4.4.md @@ -48,6 +48,7 @@ * Fix user or appid created, name only allow `^[A-Za-z]+[A-Za-z0-9-_]*$` * Fix subscribe http api crash by bad_qos `/mqtt/subscribe`,`/mqtt/subscribe_batch`. * Send DISCONNECT packet with reason code 0x98 if connection has been kicked [#7309] +* Fix make all traces stopped when emqx_trace_module is disabled. ## v4.4.1 diff --git a/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl b/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl index fd0110a36..84673b4a7 100644 --- a/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl +++ b/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl @@ -43,8 +43,10 @@ , trace_dir/0 , trace_file/1 , delete_files_after_send/2 + , is_enable/0 ]). + -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -define(TRACE, ?MODULE). @@ -102,6 +104,10 @@ start_link() -> list() -> ets:match_object(?TRACE, #?TRACE{_ = '_'}). +-spec is_enable() -> boolean(). +is_enable() -> + undefined =/= erlang:whereis(?MODULE). + -spec list(boolean()) -> [tuple()]. list(Enable) -> ets:match_object(?TRACE, #?TRACE{enable = Enable, _ = '_'}). diff --git a/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace_api.erl b/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace_api.erl index 548b58ae9..b8aa5c059 100644 --- a/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace_api.erl +++ b/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace_api.erl @@ -50,11 +50,12 @@ list_trace(_, _Params) -> FileName = emqx_trace:filename(Name, Start), LogSize = collect_file_size(Nodes, FileName, AllFileSize), Trace0 = maps:without([enable, filter], Trace), + ModEnable = emqx_trace:is_enable(), Trace0#{ log_size => LogSize , Type => iolist_to_binary(Filter) , start_at => list_to_binary(calendar:system_time_to_rfc3339(Start)) , end_at => list_to_binary(calendar:system_time_to_rfc3339(End)) - , status => status(Enable, Start, End, Now) + , status => status(ModEnable, Enable, Start, End, Now) } end, List), {ok, Traces} @@ -208,7 +209,9 @@ collect_file_size(Nodes, FileName, AllFiles) -> Acc#{Node => Size} end, #{}, Nodes). -status(false, _Start, _End, _Now) -> <<"stopped">>; -status(true, Start, _End, Now) when Now < Start -> <<"waiting">>; -status(true, _Start, End, Now) when Now >= End -> <<"stopped">>; -status(true, _Start, _End, _Now) -> <<"running">>. +%% if the module is not running, it will return stopped, user can download the trace file. +status(false, _Enable, _Start, _End, _Now) -> <<"stopped">>; +status(true, false, _Start, _End, _Now) -> <<"stopped">>; +status(true, true, Start, _End, Now) when Now < Start -> <<"waiting">>; +status(true, true, _Start, End, Now) when Now >= End -> <<"stopped">>; +status(true, true, _Start, _End, _Now) -> <<"running">>. diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 383db43f1..94ad634c7 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -7,6 +7,7 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_session,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_trace,brutal_purge,soft_purge,[]}, {add_module,emqx_relup}, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, @@ -23,6 +24,7 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {add_module,emqx_relup}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, + {load_module,emqx_trace,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_sys,brutal_purge,soft_purge,[]}, @@ -49,6 +51,8 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_session,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, + {load_module,emqx_trace,brutal_purge,soft_purge,[]}, + {delete_module,emqx_relup}, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, @@ -65,6 +69,7 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {delete_module,emqx_relup}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, + {load_module,emqx_trace,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_sys,brutal_purge,soft_purge,[]}, From d2abc2fcd0bcad05d6a8e093d28d9f0c39e49702 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Mon, 21 Mar 2022 15:20:35 +0800 Subject: [PATCH 2/3] fix: revert emqx_trace in emqx.appup.src --- src/emqx.appup.src | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index 94ad634c7..f1c6a2a78 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -7,7 +7,6 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_session,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, - {load_module,emqx_trace,brutal_purge,soft_purge,[]}, {add_module,emqx_relup}, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, @@ -24,7 +23,6 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {add_module,emqx_relup}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, - {load_module,emqx_trace,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_sys,brutal_purge,soft_purge,[]}, @@ -51,7 +49,6 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_session,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, - {load_module,emqx_trace,brutal_purge,soft_purge,[]}, {delete_module,emqx_relup}, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, @@ -69,7 +66,6 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {delete_module,emqx_relup}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, - {load_module,emqx_trace,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_sys_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_sys,brutal_purge,soft_purge,[]}, From ea915339125e6ca8e99a18cc7bde3fb94aa0acf0 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 23 Mar 2022 11:18:46 +0800 Subject: [PATCH 3/3] fix: delete multiply defined module(emqx_relup) in emqx.appup.src --- src/emqx.appup.src | 1 - 1 file changed, 1 deletion(-) diff --git a/src/emqx.appup.src b/src/emqx.appup.src index f1c6a2a78..383db43f1 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -49,7 +49,6 @@ {load_module,emqx_plugins,brutal_purge,soft_purge,[]}, {load_module,emqx_session,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, - {delete_module,emqx_relup}, {load_module,emqx_os_mon,brutal_purge,soft_purge,[]}, {load_module,emqx_pmon,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]},