فهرست منبع

Merge pull request #11271 from zhongwencool/fix-precent-check

fix: keep percentage type's range is 0%~100%
zhongwencool 2 سال پیش
والد
کامیت
f853f3d3bd
3فایلهای تغییر یافته به همراه17 افزوده شده و 10 حذف شده
  1. 15 9
      apps/emqx/src/emqx_schema.erl
  2. 1 1
      apps/emqx_conf/src/emqx_conf_cli.erl
  3. 1 0
      changes/ce/fix-11271.en.md

+ 15 - 9
apps/emqx/src/emqx_schema.erl

@@ -2496,7 +2496,11 @@ to_integer(Str) ->
     end.
     end.
 
 
 to_percent(Str) ->
 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) ->
 to_comma_separated_list(Str) ->
     {ok, string:tokens(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("sysmon.os.cpu_low_watermark", "sysmon.os.cpu_high_watermark", Conf).
 
 
 check_watermark(LowKey, HighKey, 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;
             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.
     end.
 
 
 str(A) when is_atom(A) ->
 str(A) when is_atom(A) ->

+ 1 - 1
apps/emqx_conf/src/emqx_conf_cli.erl

@@ -332,8 +332,8 @@ load_etc_config_file() ->
 
 
 filter_readonly_config(Raw) ->
 filter_readonly_config(Raw) ->
     SchemaMod = emqx_conf:schema_module(),
     SchemaMod = emqx_conf:schema_module(),
-    RawDefault = fill_defaults(Raw),
     try
     try
+        RawDefault = fill_defaults(Raw),
         _ = emqx_config:check_config(SchemaMod, RawDefault),
         _ = emqx_config:check_config(SchemaMod, RawDefault),
         ReadOnlyKeys = [atom_to_binary(K) || K <- ?READONLY_KEYS],
         ReadOnlyKeys = [atom_to_binary(K) || K <- ?READONLY_KEYS],
         {ok, maps:without(ReadOnlyKeys, Raw)}
         {ok, maps:without(ReadOnlyKeys, Raw)}

+ 1 - 0
changes/ce/fix-11271.en.md

@@ -0,0 +1 @@
+Ensure that the range of percentage type is from 0% to 100%.