Merge pull request #10683 from zhongwencool/cherry-pick-pr-from-master

chore: cherry pick pr(10626&10659) from master
This commit is contained in:
zhongwencool 2023-05-12 15:01:22 +08:00 committed by GitHub
commit 1ad01f809c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 29 deletions

View File

@ -23,8 +23,6 @@
-export([start_link/0]). -export([start_link/0]).
-export([ -export([
get_mem_check_interval/0,
set_mem_check_interval/1,
get_sysmem_high_watermark/0, get_sysmem_high_watermark/0,
set_sysmem_high_watermark/1, set_sysmem_high_watermark/1,
get_procmem_high_watermark/0, get_procmem_high_watermark/0,
@ -46,6 +44,9 @@
terminate/2, terminate/2,
code_change/3 code_change/3
]). ]).
-ifdef(TEST).
-export([is_sysmem_check_supported/0]).
-endif.
-include("emqx.hrl"). -include("emqx.hrl").
@ -61,14 +62,6 @@ update(OS) ->
%% API %% API
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
get_mem_check_interval() ->
memsup:get_check_interval().
set_mem_check_interval(Seconds) when Seconds < 60000 ->
memsup:set_check_interval(1);
set_mem_check_interval(Seconds) ->
memsup:set_check_interval(Seconds div 60000).
get_sysmem_high_watermark() -> get_sysmem_high_watermark() ->
gen_server:call(?OS_MON, ?FUNCTION_NAME, infinity). gen_server:call(?OS_MON, ?FUNCTION_NAME, infinity).
@ -103,11 +96,9 @@ init_os_monitor() ->
init_os_monitor(OS) -> init_os_monitor(OS) ->
#{ #{
sysmem_high_watermark := SysHW, sysmem_high_watermark := SysHW,
procmem_high_watermark := PHW, procmem_high_watermark := PHW
mem_check_interval := MCI
} = OS, } = OS,
set_procmem_high_watermark(PHW), set_procmem_high_watermark(PHW),
set_mem_check_interval(MCI),
ok = update_mem_alarm_status(SysHW), ok = update_mem_alarm_status(SysHW),
SysHW. SysHW.

View File

@ -43,8 +43,8 @@ init_per_testcase(t_cpu_check_alarm, Config) ->
{ok, _} = supervisor:restart_child(emqx_sys_sup, emqx_os_mon), {ok, _} = supervisor:restart_child(emqx_sys_sup, emqx_os_mon),
Config; Config;
init_per_testcase(t_sys_mem_check_alarm, Config) -> init_per_testcase(t_sys_mem_check_alarm, Config) ->
case os:type() of case emqx_os_mon:is_sysmem_check_supported() of
{unix, linux} -> true ->
SysMon = emqx_config:get([sysmon, os], #{}), SysMon = emqx_config:get([sysmon, os], #{}),
emqx_config:put([sysmon, os], SysMon#{ emqx_config:put([sysmon, os], SysMon#{
sysmem_high_watermark => 0.51, sysmem_high_watermark => 0.51,
@ -54,7 +54,7 @@ init_per_testcase(t_sys_mem_check_alarm, Config) ->
ok = supervisor:terminate_child(emqx_sys_sup, emqx_os_mon), ok = supervisor:terminate_child(emqx_sys_sup, emqx_os_mon),
{ok, _} = supervisor:restart_child(emqx_sys_sup, emqx_os_mon), {ok, _} = supervisor:restart_child(emqx_sys_sup, emqx_os_mon),
Config; Config;
_ -> false ->
Config Config
end; end;
init_per_testcase(_, Config) -> init_per_testcase(_, Config) ->
@ -63,12 +63,6 @@ init_per_testcase(_, Config) ->
Config. Config.
t_api(_) -> t_api(_) ->
?assertEqual(60000, emqx_os_mon:get_mem_check_interval()),
?assertEqual(ok, emqx_os_mon:set_mem_check_interval(30000)),
?assertEqual(60000, emqx_os_mon:get_mem_check_interval()),
?assertEqual(ok, emqx_os_mon:set_mem_check_interval(122000)),
?assertEqual(120000, emqx_os_mon:get_mem_check_interval()),
?assertEqual(0.7, emqx_os_mon:get_sysmem_high_watermark()), ?assertEqual(0.7, emqx_os_mon:get_sysmem_high_watermark()),
?assertEqual(ok, emqx_os_mon:set_sysmem_high_watermark(0.8)), ?assertEqual(ok, emqx_os_mon:set_sysmem_high_watermark(0.8)),
?assertEqual(0.8, emqx_os_mon:get_sysmem_high_watermark()), ?assertEqual(0.8, emqx_os_mon:get_sysmem_high_watermark()),
@ -86,12 +80,29 @@ t_api(_) ->
gen_server:stop(emqx_os_mon), gen_server:stop(emqx_os_mon),
ok. ok.
t_sys_mem_check_disable(Config) ->
case emqx_os_mon:is_sysmem_check_supported() of
true -> do_sys_mem_check_disable(Config);
false -> skip
end.
do_sys_mem_check_disable(_Config) ->
MemRef0 = maps:get(mem_time_ref, sys:get_state(emqx_os_mon)),
?assertEqual(true, is_reference(MemRef0), MemRef0),
emqx_config:put([sysmon, os, mem_check_interval], 1000),
emqx_os_mon:update(emqx_config:get([sysmon, os])),
MemRef1 = maps:get(mem_time_ref, sys:get_state(emqx_os_mon)),
?assertEqual(true, is_reference(MemRef1), {MemRef0, MemRef1}),
?assertNotEqual(MemRef0, MemRef1),
emqx_config:put([sysmon, os, mem_check_interval], disabled),
emqx_os_mon:update(emqx_config:get([sysmon, os])),
?assertEqual(undefined, maps:get(mem_time_ref, sys:get_state(emqx_os_mon))),
ok.
t_sys_mem_check_alarm(Config) -> t_sys_mem_check_alarm(Config) ->
case os:type() of case emqx_os_mon:is_sysmem_check_supported() of
{unix, linux} -> true -> do_sys_mem_check_alarm(Config);
do_sys_mem_check_alarm(Config); false -> skip
_ ->
skip
end. end.
do_sys_mem_check_alarm(_Config) -> do_sys_mem_check_alarm(_Config) ->

View File

@ -0,0 +1 @@
Fix the issue where emqx cannot start when `sysmon.os.mem_check_interval` is disabled.

View File

@ -65,7 +65,7 @@ defmodule EMQXUmbrella.MixProject do
# maybe forbid to fetch quicer # maybe forbid to fetch quicer
{:emqtt, {:emqtt,
github: "emqx/emqtt", tag: "1.8.5", override: true, system_env: maybe_no_quic_env()}, github: "emqx/emqtt", tag: "1.8.5", override: true, system_env: maybe_no_quic_env()},
{:rulesql, github: "emqx/rulesql", tag: "0.1.5"}, {:rulesql, github: "emqx/rulesql", tag: "0.1.6"},
{:observer_cli, "1.7.1"}, {:observer_cli, "1.7.1"},
{:system_monitor, github: "ieQu1/system_monitor", tag: "3.0.3"}, {:system_monitor, github: "ieQu1/system_monitor", tag: "3.0.3"},
{:telemetry, "1.1.0"}, {:telemetry, "1.1.0"},

View File

@ -70,7 +70,7 @@
, {replayq, {git, "https://github.com/emqx/replayq.git", {tag, "0.3.7"}}} , {replayq, {git, "https://github.com/emqx/replayq.git", {tag, "0.3.7"}}}
, {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}} , {pbkdf2, {git, "https://github.com/emqx/erlang-pbkdf2.git", {tag, "2.0.4"}}}
, {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.8.5"}}} , {emqtt, {git, "https://github.com/emqx/emqtt", {tag, "1.8.5"}}}
, {rulesql, {git, "https://github.com/emqx/rulesql", {tag, "0.1.5"}}} , {rulesql, {git, "https://github.com/emqx/rulesql", {tag, "0.1.6"}}}
, {observer_cli, "1.7.1"} % NOTE: depends on recon 2.5.x , {observer_cli, "1.7.1"} % NOTE: depends on recon 2.5.x
, {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}} , {system_monitor, {git, "https://github.com/ieQu1/system_monitor", {tag, "3.0.3"}}}
, {getopt, "1.0.2"} , {getopt, "1.0.2"}