From 3dd2084c2e0f78d27b54da151b0b570b8138f0a0 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 14 Oct 2022 16:05:01 +0800 Subject: [PATCH 1/7] fix: get trace list crash when trace not initialized --- apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 95e705337..e51cc8113 100644 --- a/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl +++ b/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl @@ -104,7 +104,10 @@ start_link() -> -spec list() -> [tuple()]. list() -> - ets:match_object(?TRACE, #?TRACE{_ = '_'}). + case ets:info(?TRACE) of + undefined -> []; + _ -> ets:match_object(?TRACE, #?TRACE{_ = '_'}) + end. -spec is_enable() -> boolean(). is_enable() -> From 4e4f72d4795a1a5e78975fa2ecd0882c077aebf5 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 14 Oct 2022 16:07:35 +0800 Subject: [PATCH 2/7] fix: use os:system_time replace erlang:system_time in trace's start_at/end_at --- apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 e51cc8113..b86d197ca 100644 --- a/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl +++ b/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl @@ -156,7 +156,7 @@ update(Name, Enable) -> [] -> mnesia:abort(not_found); [#?TRACE{enable = Enable}] -> ok; [Rec] -> - case erlang:system_time(second) >= Rec#?TRACE.end_at of + case os:system_time(second) >= Rec#?TRACE.end_at of false -> mnesia:write(?TRACE, Rec#?TRACE{enable = Enable}, write); true -> mnesia:abort(finished) end @@ -291,7 +291,7 @@ insert_new_trace(Trace) -> transaction(Tran). update_trace(Traces) -> - Now = erlang:system_time(second), + Now = os:system_time(second), {_Waiting, Running, Finished} = classify_by_time(Traces, Now), disable_finished(Finished), Started = emqx_trace_handler:running(), @@ -418,7 +418,7 @@ ensure_map(Trace) when is_list(Trace) -> end, #{}, Trace). fill_default(Trace = #?TRACE{start_at = undefined}) -> - fill_default(Trace#?TRACE{start_at = erlang:system_time(second)}); + fill_default(Trace#?TRACE{start_at = os:system_time(second)}); fill_default(Trace = #?TRACE{end_at = undefined, start_at = StartAt}) -> fill_default(Trace#?TRACE{end_at = StartAt + 10 * 60}); fill_default(Trace) -> Trace. @@ -454,7 +454,7 @@ to_trace(#{start_at := StartAt} = Trace, Rec) -> {error, Reason} -> {error, Reason} end; to_trace(#{end_at := EndAt} = Trace, Rec) -> - Now = erlang:system_time(second), + Now = os:system_time(second), case to_system_second(EndAt) of {ok, Sec} when Sec > Now -> to_trace(maps:remove(end_at, Trace), Rec#?TRACE{end_at = Sec}); @@ -481,7 +481,7 @@ validate_ip_address(IP) -> to_system_second(At) -> try Sec = calendar:rfc3339_to_system_time(binary_to_list(At), [{unit, second}]), - Now = erlang:system_time(second), + Now = os:system_time(second), {ok, erlang:max(Now, Sec)} catch error: {badmatch, _} -> {error, ["The rfc3339 specification not satisfied: ", At]} From 59b59238878f37bc399972fecd6b8c14d3e7f9c5 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 14 Oct 2022 16:14:23 +0800 Subject: [PATCH 3/7] chore: update changelog and appup.src --- CHANGES-4.4.md | 4 ++++ apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src | 2 +- apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES-4.4.md b/CHANGES-4.4.md index 7228ad22b..a84139aac 100644 --- a/CHANGES-4.4.md +++ b/CHANGES-4.4.md @@ -2,8 +2,12 @@ ## v4.4.11 + ### Bug fixes (synced from v4.3.22) +- Fix get trace list crash when trace not initialize. +- Fix create trace sometime failed by end_at time has already passed. + ### Enhancements (synced from v4.3.22) ## v4.4.10 diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src b/apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src index 4b6b041a2..2b59d095b 100644 --- a/apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src +++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs.app.src @@ -1,6 +1,6 @@ {application, emqx_plugin_libs, [{description, "EMQ X Plugin utility libs"}, - {vsn, "4.4.5"}, + {vsn, "4.4.6"}, {modules, []}, {applications, [kernel,stdlib]}, {env, []} diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src b/apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src index e4b8e9d1c..7f308de01 100644 --- a/apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src +++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src @@ -2,6 +2,8 @@ %% Unless you know what you are doing, DO NOT edit manually!! {VSN, [ + {"4.4.5", + [{load_module,emqx_trace,brutal_purge,soft_purge,[]}]}, {"4.4.4", [{load_module,emqx_trace,brutal_purge,soft_purge,[]}, {load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]}, @@ -24,6 +26,8 @@ {load_module,emqx_slow_subs_api,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}], [ + {"4.4.5", + [{load_module,emqx_trace,brutal_purge,soft_purge,[]}]}, {"4.4.4", [{load_module,emqx_trace,brutal_purge,soft_purge,[]}, {load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]}, From 0d903eb2e14aa283d9d2fc101c27cb42c23b9d6a Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Sat, 22 Oct 2022 10:22:50 +0800 Subject: [PATCH 4/7] chore: update changelog --- CHANGES-4.4.md | 5 +++-- .../emqx_plugin_libs/src/emqx_trace/emqx_trace.erl | 14 +++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CHANGES-4.4.md b/CHANGES-4.4.md index a84139aac..34968532e 100644 --- a/CHANGES-4.4.md +++ b/CHANGES-4.4.md @@ -2,11 +2,12 @@ ## v4.4.11 +<<<<<<< HEAD ### Bug fixes (synced from v4.3.22) -- Fix get trace list crash when trace not initialize. -- Fix create trace sometime failed by end_at time has already passed. +- Fix get trace list crash when trace not initialize. [#9156](https://github.com/emqx/emqx/pull/9156) +- Fix create trace sometime failed by end_at time has already passed. [#9156](https://github.com/emqx/emqx/pull/9156) ### Enhancements (synced from v4.3.22) 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 b86d197ca..93455523e 100644 --- a/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl +++ b/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl @@ -156,7 +156,7 @@ update(Name, Enable) -> [] -> mnesia:abort(not_found); [#?TRACE{enable = Enable}] -> ok; [Rec] -> - case os:system_time(second) >= Rec#?TRACE.end_at of + case os_now() >= Rec#?TRACE.end_at of false -> mnesia:write(?TRACE, Rec#?TRACE{enable = Enable}, write); true -> mnesia:abort(finished) end @@ -291,7 +291,7 @@ insert_new_trace(Trace) -> transaction(Tran). update_trace(Traces) -> - Now = os:system_time(second), + Now = os_now(), {_Waiting, Running, Finished} = classify_by_time(Traces, Now), disable_finished(Finished), Started = emqx_trace_handler:running(), @@ -418,7 +418,7 @@ ensure_map(Trace) when is_list(Trace) -> end, #{}, Trace). fill_default(Trace = #?TRACE{start_at = undefined}) -> - fill_default(Trace#?TRACE{start_at = os:system_time(second)}); + fill_default(Trace#?TRACE{start_at = os_now()}); fill_default(Trace = #?TRACE{end_at = undefined, start_at = StartAt}) -> fill_default(Trace#?TRACE{end_at = StartAt + 10 * 60}); fill_default(Trace) -> Trace. @@ -454,7 +454,7 @@ to_trace(#{start_at := StartAt} = Trace, Rec) -> {error, Reason} -> {error, Reason} end; to_trace(#{end_at := EndAt} = Trace, Rec) -> - Now = os:system_time(second), + Now = os_now(), case to_system_second(EndAt) of {ok, Sec} when Sec > Now -> to_trace(maps:remove(end_at, Trace), Rec#?TRACE{end_at = Sec}); @@ -481,7 +481,7 @@ validate_ip_address(IP) -> to_system_second(At) -> try Sec = calendar:rfc3339_to_system_time(binary_to_list(At), [{unit, second}]), - Now = os:system_time(second), + Now = os_now(), {ok, erlang:max(Now, Sec)} catch error: {badmatch, _} -> {error, ["The rfc3339 specification not satisfied: ", At]} @@ -514,3 +514,7 @@ set_log_primary_level(NewLevel) -> true -> emqx_logger:set_primary_log_level(NewLevel); false -> ok end. + +%% the dashboard use os time to create trace, donot use erlang:system_time/1 +os_now() -> + os:system_time(second). From 81d4bd10a3910b03513e88ff06d603ce99e385f3 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 26 Oct 2022 10:07:44 +0800 Subject: [PATCH 5/7] fix: alway use os:system_time/1 when managing traces --- apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl | 3 ++- apps/emqx_plugin_libs/src/emqx_trace/emqx_trace_api.erl | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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 93455523e..6e295ab49 100644 --- a/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl +++ b/apps/emqx_plugin_libs/src/emqx_trace/emqx_trace.erl @@ -36,6 +36,7 @@ , delete/1 , clear/0 , update/2 + , os_now/0 ]). -export([ format/1 @@ -515,6 +516,6 @@ set_log_primary_level(NewLevel) -> false -> ok end. -%% the dashboard use os time to create trace, donot use erlang:system_time/1 +%% the dashboard use os time to create trace, do not use erlang:system_time/1 os_now() -> os:system_time(second). 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 a478b8a63..126ff2573 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 @@ -44,7 +44,7 @@ list_trace(_, _Params) -> Nodes = ekka_mnesia:running_nodes(), TraceSize = cluster_call(?MODULE, get_trace_size, [], 30000), AllFileSize = lists:foldl(fun(F, Acc) -> maps:merge(Acc, F) end, #{}, TraceSize), - Now = erlang:system_time(second), + Now = emqx_trace:os_now(), Traces = lists:map(fun(Trace = #{name := Name, start_at := Start, end_at := End, enable := Enable, type := Type, filter := Filter}) -> From 3dddacb3f0a2ceb3c0437e54dbfbf2dcbf680a93 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 26 Oct 2022 10:16:33 +0800 Subject: [PATCH 6/7] chore: update emqx_trace_api into appup.src --- apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src b/apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src index 7f308de01..b1042d289 100644 --- a/apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src +++ b/apps/emqx_plugin_libs/src/emqx_plugin_libs.appup.src @@ -2,14 +2,9 @@ %% Unless you know what you are doing, DO NOT edit manually!! {VSN, [ - {"4.4.5", - [{load_module,emqx_trace,brutal_purge,soft_purge,[]}]}, - {"4.4.4", + {<<"4\\.4\\.[3-5]">>, [{load_module,emqx_trace,brutal_purge,soft_purge,[]}, {load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]}, - {"4.4.3", - [{load_module,emqx_trace,brutal_purge,soft_purge,[]}, - {load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]}, {"4.4.2",[ {load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}, {load_module,emqx_trace,brutal_purge,soft_purge,[]}, @@ -26,9 +21,7 @@ {load_module,emqx_slow_subs_api,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}], [ - {"4.4.5", - [{load_module,emqx_trace,brutal_purge,soft_purge,[]}]}, - {"4.4.4", + {<<"4\\.4\\.[3-5]">>, [{load_module,emqx_trace,brutal_purge,soft_purge,[]}, {load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]}, {"4.4.3", From c41fd8d068418fa96f2407ed9474ea6ed39ef088 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 26 Oct 2022 15:28:38 +0800 Subject: [PATCH 7/7] chore: update changelog for fixing trace bug --- CHANGES-4.4.md | 11 ----------- changes/v4.4.11-en.md | 7 +++++++ changes/v4.4.11-zh.md | 8 ++++++++ 3 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 changes/v4.4.11-en.md create mode 100644 changes/v4.4.11-zh.md diff --git a/CHANGES-4.4.md b/CHANGES-4.4.md index 34968532e..47d37d0a3 100644 --- a/CHANGES-4.4.md +++ b/CHANGES-4.4.md @@ -1,16 +1,5 @@ # EMQX 4.4 Changes -## v4.4.11 - -<<<<<<< HEAD - -### Bug fixes (synced from v4.3.22) - -- Fix get trace list crash when trace not initialize. [#9156](https://github.com/emqx/emqx/pull/9156) -- Fix create trace sometime failed by end_at time has already passed. [#9156](https://github.com/emqx/emqx/pull/9156) - -### Enhancements (synced from v4.3.22) - ## v4.4.10 ### Bug fixes (synced from v4.3.21) diff --git a/changes/v4.4.11-en.md b/changes/v4.4.11-en.md new file mode 100644 index 000000000..bc0ee9bb9 --- /dev/null +++ b/changes/v4.4.11-en.md @@ -0,0 +1,7 @@ +### Enhancements + +### Bug fixes + +- Fix get trace list crash when trace not initialize. [#9156](https://github.com/emqx/emqx/pull/9156) + +- Fix create trace sometime failed by end_at time has already passed. [#9156](https://github.com/emqx/emqx/pull/9156) diff --git a/changes/v4.4.11-zh.md b/changes/v4.4.11-zh.md new file mode 100644 index 000000000..f27d12d59 --- /dev/null +++ b/changes/v4.4.11-zh.md @@ -0,0 +1,8 @@ +### 增强 + + +### 修复 + +- 修复日志追踪模块没开启时,GET Trace 列表接口报错的问题。[#9156](https://github.com/emqx/emqx/pull/9156) + +- 修复创建追踪日志时偶尔会报`end_at time has already passed`错误,导致创建失败。[#9156](https://github.com/emqx/emqx/pull/9156)