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
|
# EMQX 4.4 Changes
|
||||||
|
|
||||||
## v4.4.11
|
|
||||||
|
|
||||||
### Bug fixes (synced from v4.3.22)
|
|
||||||
|
|
||||||
### Enhancements (synced from v4.3.22)
|
|
||||||
|
|
||||||
## v4.4.10
|
## v4.4.10
|
||||||
|
|
||||||
### Bug fixes (synced from v4.3.21)
|
### Bug fixes (synced from v4.3.21)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{application, emqx_plugin_libs,
|
{application, emqx_plugin_libs,
|
||||||
[{description, "EMQ X Plugin utility libs"},
|
[{description, "EMQ X Plugin utility libs"},
|
||||||
{vsn, "4.4.5"},
|
{vsn, "4.4.6"},
|
||||||
{modules, []},
|
{modules, []},
|
||||||
{applications, [kernel,stdlib]},
|
{applications, [kernel,stdlib]},
|
||||||
{env, []}
|
{env, []}
|
||||||
|
|
|
@ -2,10 +2,7 @@
|
||||||
%% Unless you know what you are doing, DO NOT edit manually!!
|
%% Unless you know what you are doing, DO NOT edit manually!!
|
||||||
{VSN,
|
{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,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.4.2",[
|
{"4.4.2",[
|
||||||
|
@ -24,7 +21,7 @@
|
||||||
{load_module,emqx_slow_subs_api,brutal_purge,soft_purge,[]}]},
|
{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,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.4.3",
|
{"4.4.3",
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
, delete/1
|
, delete/1
|
||||||
, clear/0
|
, clear/0
|
||||||
, update/2
|
, update/2
|
||||||
|
, os_now/0
|
||||||
]).
|
]).
|
||||||
|
|
||||||
-export([ format/1
|
-export([ format/1
|
||||||
|
@ -104,7 +105,10 @@ start_link() ->
|
||||||
|
|
||||||
-spec list() -> [tuple()].
|
-spec list() -> [tuple()].
|
||||||
list() ->
|
list() ->
|
||||||
ets:match_object(?TRACE, #?TRACE{_ = '_'}).
|
case ets:info(?TRACE) of
|
||||||
|
undefined -> [];
|
||||||
|
_ -> ets:match_object(?TRACE, #?TRACE{_ = '_'})
|
||||||
|
end.
|
||||||
|
|
||||||
-spec is_enable() -> boolean().
|
-spec is_enable() -> boolean().
|
||||||
is_enable() ->
|
is_enable() ->
|
||||||
|
@ -153,7 +157,7 @@ update(Name, Enable) ->
|
||||||
[] -> mnesia:abort(not_found);
|
[] -> mnesia:abort(not_found);
|
||||||
[#?TRACE{enable = Enable}] -> ok;
|
[#?TRACE{enable = Enable}] -> ok;
|
||||||
[Rec] ->
|
[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);
|
false -> mnesia:write(?TRACE, Rec#?TRACE{enable = Enable}, write);
|
||||||
true -> mnesia:abort(finished)
|
true -> mnesia:abort(finished)
|
||||||
end
|
end
|
||||||
|
@ -288,7 +292,7 @@ insert_new_trace(Trace) ->
|
||||||
transaction(Tran).
|
transaction(Tran).
|
||||||
|
|
||||||
update_trace(Traces) ->
|
update_trace(Traces) ->
|
||||||
Now = erlang:system_time(second),
|
Now = os_now(),
|
||||||
{_Waiting, Running, Finished} = classify_by_time(Traces, Now),
|
{_Waiting, Running, Finished} = classify_by_time(Traces, Now),
|
||||||
disable_finished(Finished),
|
disable_finished(Finished),
|
||||||
Started = emqx_trace_handler:running(),
|
Started = emqx_trace_handler:running(),
|
||||||
|
@ -415,7 +419,7 @@ ensure_map(Trace) when is_list(Trace) ->
|
||||||
end, #{}, Trace).
|
end, #{}, Trace).
|
||||||
|
|
||||||
fill_default(Trace = #?TRACE{start_at = undefined}) ->
|
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 = undefined, start_at = StartAt}) ->
|
||||||
fill_default(Trace#?TRACE{end_at = StartAt + 10 * 60});
|
fill_default(Trace#?TRACE{end_at = StartAt + 10 * 60});
|
||||||
fill_default(Trace) -> Trace.
|
fill_default(Trace) -> Trace.
|
||||||
|
@ -451,7 +455,7 @@ to_trace(#{start_at := StartAt} = Trace, Rec) ->
|
||||||
{error, Reason} -> {error, Reason}
|
{error, Reason} -> {error, Reason}
|
||||||
end;
|
end;
|
||||||
to_trace(#{end_at := EndAt} = Trace, Rec) ->
|
to_trace(#{end_at := EndAt} = Trace, Rec) ->
|
||||||
Now = erlang:system_time(second),
|
Now = os_now(),
|
||||||
case to_system_second(EndAt) of
|
case to_system_second(EndAt) of
|
||||||
{ok, Sec} when Sec > Now ->
|
{ok, Sec} when Sec > Now ->
|
||||||
to_trace(maps:remove(end_at, Trace), Rec#?TRACE{end_at = Sec});
|
to_trace(maps:remove(end_at, Trace), Rec#?TRACE{end_at = Sec});
|
||||||
|
@ -478,7 +482,7 @@ validate_ip_address(IP) ->
|
||||||
to_system_second(At) ->
|
to_system_second(At) ->
|
||||||
try
|
try
|
||||||
Sec = calendar:rfc3339_to_system_time(binary_to_list(At), [{unit, second}]),
|
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)}
|
{ok, erlang:max(Now, Sec)}
|
||||||
catch error: {badmatch, _} ->
|
catch error: {badmatch, _} ->
|
||||||
{error, ["The rfc3339 specification not satisfied: ", At]}
|
{error, ["The rfc3339 specification not satisfied: ", At]}
|
||||||
|
@ -511,3 +515,7 @@ set_log_primary_level(NewLevel) ->
|
||||||
true -> emqx_logger:set_primary_log_level(NewLevel);
|
true -> emqx_logger:set_primary_log_level(NewLevel);
|
||||||
false -> ok
|
false -> ok
|
||||||
end.
|
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(),
|
Nodes = ekka_mnesia:running_nodes(),
|
||||||
TraceSize = cluster_call(?MODULE, get_trace_size, [], 30000),
|
TraceSize = cluster_call(?MODULE, get_trace_size, [], 30000),
|
||||||
AllFileSize = lists:foldl(fun(F, Acc) -> maps:merge(Acc, F) end, #{}, TraceSize),
|
AllFileSize = lists:foldl(fun(F, Acc) -> maps:merge(Acc, F) end, #{}, TraceSize),
|
||||||
Now = erlang:system_time(second),
|
Now = emqx_trace:os_now(),
|
||||||
Traces =
|
Traces =
|
||||||
lists:map(fun(Trace = #{name := Name, start_at := Start,
|
lists:map(fun(Trace = #{name := Name, start_at := Start,
|
||||||
end_at := End, enable := Enable, type := Type, filter := Filter}) ->
|
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