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:
commit
b447fc88af
|
@ -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)
|
||||
|
|
|
@ -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, []}
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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}) ->
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
Loading…
Reference in New Issue