Merge pull request #9156 from zhongwencool/list-trace-crash-when-disable

fix: get trace list crash when trace not initialized
This commit is contained in:
zhongwencool 2022-10-26 16:46:23 +08:00 committed by GitHub
commit b447fc88af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 33 additions and 19 deletions

View File

@ -1,11 +1,5 @@
# EMQX 4.4 Changes
## v4.4.11
### Bug fixes (synced from v4.3.22)
### Enhancements (synced from v4.3.22)
## v4.4.10
### Bug fixes (synced from v4.3.21)

View File

@ -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, []}

View File

@ -2,12 +2,9 @@
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[
{"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,[]},
@ -24,7 +21,7 @@
{load_module,emqx_slow_subs_api,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",

View File

@ -36,6 +36,7 @@
, delete/1
, clear/0
, update/2
, os_now/0
]).
-export([ format/1
@ -104,7 +105,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() ->
@ -153,7 +157,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_now() >= Rec#?TRACE.end_at of
false -> mnesia:write(?TRACE, Rec#?TRACE{enable = Enable}, write);
true -> mnesia:abort(finished)
end
@ -288,7 +292,7 @@ insert_new_trace(Trace) ->
transaction(Tran).
update_trace(Traces) ->
Now = erlang:system_time(second),
Now = os_now(),
{_Waiting, Running, Finished} = classify_by_time(Traces, Now),
disable_finished(Finished),
Started = emqx_trace_handler:running(),
@ -415,7 +419,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_now()});
fill_default(Trace = #?TRACE{end_at = undefined, start_at = StartAt}) ->
fill_default(Trace#?TRACE{end_at = StartAt + 10 * 60});
fill_default(Trace) -> Trace.
@ -451,7 +455,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_now(),
case to_system_second(EndAt) of
{ok, Sec} when Sec > Now ->
to_trace(maps:remove(end_at, Trace), Rec#?TRACE{end_at = Sec});
@ -478,7 +482,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_now(),
{ok, erlang:max(Now, Sec)}
catch error: {badmatch, _} ->
{error, ["The rfc3339 specification not satisfied: ", At]}
@ -511,3 +515,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, do not use erlang:system_time/1
os_now() ->
os:system_time(second).

View File

@ -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}) ->

7
changes/v4.4.11-en.md Normal file
View File

@ -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)

8
changes/v4.4.11-zh.md Normal file
View File

@ -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)