Merge pull request #7135 from thalesmg/fix-sys-mon-portinfo-43
fix(sys_mon): guard before calling `erlang:port_info` [4.3]
This commit is contained in:
commit
a147f82b7c
|
@ -1,7 +1,8 @@
|
||||||
%% -*- mode: erlang -*-
|
%% -*- mode: erlang -*-
|
||||||
{VSN,
|
{VSN,
|
||||||
[{<<"4\\.3\\.[4-5]">>,
|
[{<<"4\\.3\\.[4-5]">>,
|
||||||
[{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
[{load_module,emqx_exproto_conn,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
||||||
{<<"4\\.3\\.[2-3]">>,
|
{<<"4\\.3\\.[2-3]">>,
|
||||||
[{load_module,emqx_exproto_conn,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_exproto_conn,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
||||||
|
@ -12,7 +13,8 @@
|
||||||
{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
||||||
{<<".*">>,[]}],
|
{<<".*">>,[]}],
|
||||||
[{<<"4\\.3\\.[4-5]">>,
|
[{<<"4\\.3\\.[4-5]">>,
|
||||||
[{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
[{load_module,emqx_exproto_conn,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
||||||
{<<"4\\.3\\.[2-3]">>,
|
{<<"4\\.3\\.[2-3]">>,
|
||||||
[{load_module,emqx_exproto_conn,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_exproto_conn,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_exproto_channel,brutal_purge,soft_purge,[]}]},
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
%% -*- mode: erlang -*-
|
%% -*- mode: erlang -*-
|
||||||
{VSN,
|
{VSN,
|
||||||
[{"4.3.6",
|
[{"4.3.6",
|
||||||
[{update,emqx_rule_metrics,{advanced,["4.3.6"]}},
|
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
|
{update,emqx_rule_metrics,{advanced,["4.3.6"]}},
|
||||||
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
|
@ -58,7 +59,8 @@
|
||||||
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
|
||||||
{<<".*">>,[]}],
|
{<<".*">>,[]}],
|
||||||
[{"4.3.6",
|
[{"4.3.6",
|
||||||
[{update,emqx_rule_metrics,{advanced,["4.3.6"]}},
|
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
|
||||||
|
{update,emqx_rule_metrics,{advanced,["4.3.6"]}},
|
||||||
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
%% -*- mode: erlang -*-
|
%% -*- mode: erlang -*-
|
||||||
{VSN,
|
{VSN,
|
||||||
[{"4.3.13",
|
[{"4.3.13",
|
||||||
[{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_banned,brutal_purge,soft_purge,[]},
|
{load_module,emqx_banned,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_pmon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_pmon,brutal_purge,soft_purge,[]},
|
||||||
|
@ -9,7 +10,8 @@
|
||||||
{load_module,emqx_cm,brutal_purge,soft_purge,[]},
|
{load_module,emqx_cm,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_channel,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_channel,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.12",
|
{"4.3.12",
|
||||||
[{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_banned,brutal_purge,soft_purge,[]},
|
{load_module,emqx_banned,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_pmon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_pmon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
@ -374,7 +376,8 @@
|
||||||
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_limiter,brutal_purge,soft_purge,[]}]},
|
||||||
{<<".*">>,[]}],
|
{<<".*">>,[]}],
|
||||||
[{"4.3.13",
|
[{"4.3.13",
|
||||||
[{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_banned,brutal_purge,soft_purge,[]},
|
{load_module,emqx_banned,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_pmon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_pmon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
{load_module,emqx_ctl,brutal_purge,soft_purge,[]},
|
||||||
|
@ -382,7 +385,8 @@
|
||||||
{load_module,emqx_os_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_os_mon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_channel,brutal_purge,soft_purge,[]}]},
|
{load_module,emqx_channel,brutal_purge,soft_purge,[]}]},
|
||||||
{"4.3.12",
|
{"4.3.12",
|
||||||
[{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
[{load_module,emqx_sys_mon,brutal_purge,soft_purge,[]},
|
||||||
|
{load_module,emqx_connection,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_banned,brutal_purge,soft_purge,[]},
|
{load_module,emqx_banned,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_pmon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_pmon,brutal_purge,soft_purge,[]},
|
||||||
{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
{load_module,emqx_vm_mon,brutal_purge,soft_purge,[]},
|
||||||
|
|
|
@ -119,7 +119,7 @@ handle_info({monitor, Port, long_schedule, Info}, State) when is_port(Port) ->
|
||||||
suppress({long_schedule, Port},
|
suppress({long_schedule, Port},
|
||||||
fun() ->
|
fun() ->
|
||||||
WarnMsg = io_lib:format("long_schedule warning: port = ~p, info: ~p", [Port, Info]),
|
WarnMsg = io_lib:format("long_schedule warning: port = ~p, info: ~p", [Port, Info]),
|
||||||
?LOG(warning, "~s~n~p", [WarnMsg, erlang:port_info(Port)]),
|
?LOG(warning, "~s~n~p", [WarnMsg, portinfo(Port)]),
|
||||||
safe_publish(long_schedule, WarnMsg)
|
safe_publish(long_schedule, WarnMsg)
|
||||||
end, State);
|
end, State);
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ handle_info({monitor, SusPid, busy_port, Port}, State) ->
|
||||||
suppress({busy_port, Port},
|
suppress({busy_port, Port},
|
||||||
fun() ->
|
fun() ->
|
||||||
WarnMsg = io_lib:format("busy_port warning: suspid = ~p, port = ~p", [SusPid, Port]),
|
WarnMsg = io_lib:format("busy_port warning: suspid = ~p, port = ~p", [SusPid, Port]),
|
||||||
?LOG(warning, "~s~n~p~n~p", [WarnMsg, procinfo(SusPid), erlang:port_info(Port)]),
|
?LOG(warning, "~s~n~p~n~p", [WarnMsg, procinfo(SusPid), portinfo(Port)]),
|
||||||
safe_publish(busy_port, WarnMsg)
|
safe_publish(busy_port, WarnMsg)
|
||||||
end, State);
|
end, State);
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ handle_info({monitor, SusPid, busy_dist_port, Port}, State) ->
|
||||||
suppress({busy_dist_port, Port},
|
suppress({busy_dist_port, Port},
|
||||||
fun() ->
|
fun() ->
|
||||||
WarnMsg = io_lib:format("busy_dist_port warning: suspid = ~p, port = ~p", [SusPid, Port]),
|
WarnMsg = io_lib:format("busy_dist_port warning: suspid = ~p, port = ~p", [SusPid, Port]),
|
||||||
?LOG(warning, "~s~n~p~n~p", [WarnMsg, procinfo(SusPid), erlang:port_info(Port)]),
|
?LOG(warning, "~s~n~p~n~p", [WarnMsg, procinfo(SusPid), portinfo(Port)]),
|
||||||
safe_publish(busy_dist_port, WarnMsg)
|
safe_publish(busy_dist_port, WarnMsg)
|
||||||
end, State);
|
end, State);
|
||||||
|
|
||||||
|
@ -200,3 +200,9 @@ safe_publish(Event, WarnMsg) ->
|
||||||
sysmon_msg(Topic, Payload) ->
|
sysmon_msg(Topic, Payload) ->
|
||||||
Msg = emqx_message:make(?SYSMON, Topic, Payload),
|
Msg = emqx_message:make(?SYSMON, Topic, Payload),
|
||||||
emqx_message:set_flag(sys, Msg).
|
emqx_message:set_flag(sys, Msg).
|
||||||
|
|
||||||
|
portinfo(Port) ->
|
||||||
|
case is_port(Port) andalso erlang:port_info(Port) of
|
||||||
|
L when is_list(L) -> L;
|
||||||
|
_ -> []
|
||||||
|
end.
|
||||||
|
|
|
@ -33,6 +33,11 @@
|
||||||
{self(), busy_port,
|
{self(), busy_port,
|
||||||
concat_str("busy_port warning: suspid = ~p, port = ~p",
|
concat_str("busy_port warning: suspid = ~p, port = ~p",
|
||||||
self(), list_to_port("#Port<0.4>")), list_to_port("#Port<0.4>")},
|
self(), list_to_port("#Port<0.4>")), list_to_port("#Port<0.4>")},
|
||||||
|
%% for the case when the port is missing, for some
|
||||||
|
%% reason.
|
||||||
|
{self(), busy_port,
|
||||||
|
concat_str("busy_port warning: suspid = ~p, port = ~p",
|
||||||
|
self(), []), []},
|
||||||
{self(), busy_dist_port,
|
{self(), busy_dist_port,
|
||||||
concat_str("busy_dist_port warning: suspid = ~p, port = ~p",
|
concat_str("busy_dist_port warning: suspid = ~p, port = ~p",
|
||||||
self(), list_to_port("#Port<0.4>")),list_to_port("#Port<0.4>")},
|
self(), list_to_port("#Port<0.4>")),list_to_port("#Port<0.4>")},
|
||||||
|
@ -122,6 +127,16 @@ t_sys_mon(_Config) ->
|
||||||
validate_sys_mon_info(PidOrPort, SysMonName,ValidateInfo, InfoOrPort)
|
validate_sys_mon_info(PidOrPort, SysMonName,ValidateInfo, InfoOrPort)
|
||||||
end, ?INPUTINFO).
|
end, ?INPUTINFO).
|
||||||
|
|
||||||
|
%% Existing port, but closed.
|
||||||
|
t_sys_mon_dead_port(_Config) ->
|
||||||
|
process_flag(trap_exit, true),
|
||||||
|
Port = dead_port(),
|
||||||
|
{PidOrPort, SysMonName, ValidateInfo, InfoOrPort} =
|
||||||
|
{self(), busy_port,
|
||||||
|
concat_str("busy_port warning: suspid = ~p, port = ~p",
|
||||||
|
self(), Port), Port},
|
||||||
|
validate_sys_mon_info(PidOrPort, SysMonName, ValidateInfo, InfoOrPort).
|
||||||
|
|
||||||
t_sys_mon2(_Config) ->
|
t_sys_mon2(_Config) ->
|
||||||
?SYSMON ! {timeout, ignored, reset},
|
?SYSMON ! {timeout, ignored, reset},
|
||||||
?SYSMON ! {ignored},
|
?SYSMON ! {ignored},
|
||||||
|
@ -155,3 +170,8 @@ some_function(Parent, _Arg2) ->
|
||||||
stop ->
|
stop ->
|
||||||
ok
|
ok
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
dead_port() ->
|
||||||
|
Port = erlang:open_port({spawn, "ls"}, []),
|
||||||
|
exit(Port, kill),
|
||||||
|
Port.
|
||||||
|
|
Loading…
Reference in New Issue