From 11ee6abf02315ace1a913f74acce8e09ddac3189 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 14 Jul 2023 16:48:50 +0800 Subject: [PATCH] fix: keep precent range is 0%~100% --- apps/emqx/src/emqx_schema.erl | 24 +++++++++++++++--------- apps/emqx_conf/src/emqx_conf_cli.erl | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index ce1af66af..d2edbcf2d 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -2496,7 +2496,11 @@ to_integer(Str) -> end. to_percent(Str) -> - {ok, hocon_postprocess:percent(Str)}. + Percent = hocon_postprocess:percent(Str), + case is_number(Percent) andalso Percent >= 0.0 andalso Percent =< 1.0 of + true -> {ok, Percent}; + false -> {error, Str} + end. to_comma_separated_list(Str) -> {ok, string:tokens(Str, ", ")}. @@ -2724,15 +2728,17 @@ check_cpu_watermark(Conf) -> check_watermark("sysmon.os.cpu_low_watermark", "sysmon.os.cpu_high_watermark", Conf). check_watermark(LowKey, HighKey, Conf) -> - case hocon_maps:get(LowKey, Conf) of - undefined -> + case to_percent(hocon_maps:get(LowKey, Conf)) of + {error, undefined} -> true; - Low -> - High = hocon_maps:get(HighKey, Conf), - case Low < High of - true -> true; - false -> {bad_watermark, #{LowKey => Low, HighKey => High}} - end + {ok, Low} -> + case to_percent(hocon_maps:get(HighKey, Conf)) of + {ok, High} when High > Low -> true; + {ok, High} -> {bad_watermark, #{LowKey => Low, HighKey => High}}; + {error, HighVal} -> {bad_watermark, #{HighKey => HighVal}} + end; + {error, Low} -> + {bad_watermark, #{LowKey => Low}} end. str(A) when is_atom(A) -> diff --git a/apps/emqx_conf/src/emqx_conf_cli.erl b/apps/emqx_conf/src/emqx_conf_cli.erl index 05eb60531..b0a1a414d 100644 --- a/apps/emqx_conf/src/emqx_conf_cli.erl +++ b/apps/emqx_conf/src/emqx_conf_cli.erl @@ -332,8 +332,8 @@ load_etc_config_file() -> filter_readonly_config(Raw) -> SchemaMod = emqx_conf:schema_module(), - RawDefault = fill_defaults(Raw), try + RawDefault = fill_defaults(Raw), _ = emqx_config:check_config(SchemaMod, RawDefault), ReadOnlyKeys = [atom_to_binary(K) || K <- ?READONLY_KEYS], {ok, maps:without(ReadOnlyKeys, Raw)}