From 5d3f464ec3f3733ce9b9012c5a61a4bb8acd2fa9 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jun 2024 14:41:34 +0800 Subject: [PATCH 1/5] fix: ws/wss's max_frame_size should > 0 --- apps/emqx/src/emqx_schema.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 6c8466aab..29c201ad6 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -885,7 +885,7 @@ fields("ws_opts") -> )}, {"max_frame_size", sc( - hoconsc:union([infinity, integer()]), + hoconsc:union([infinity, pos_integer()]), #{ default => infinity, desc => ?DESC(fields_ws_opts_max_frame_size) From 825bfe47175cde20d8a49013700c56fdc36e00ea Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jun 2024 15:11:09 +0800 Subject: [PATCH 2/5] fix: load bad configs return unknown msg --- apps/emqx_conf/src/emqx_conf_cli.erl | 6 ++++++ apps/emqx_management/src/emqx_mgmt_api_configs.erl | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/emqx_conf/src/emqx_conf_cli.erl b/apps/emqx_conf/src/emqx_conf_cli.erl index 257cc7453..f2b9d63b0 100644 --- a/apps/emqx_conf/src/emqx_conf_cli.erl +++ b/apps/emqx_conf/src/emqx_conf_cli.erl @@ -237,6 +237,12 @@ load_config(Bin, Opts) when is_binary(Bin) -> case hocon:binary(Bin) of {ok, RawConf} -> load_config_from_raw(RawConf, Opts); + %% Type is scan_error, parse_error... + {error, {Type, Meta = #{reason := Reason}}} -> + {error, Meta#{ + reason => unicode:characters_to_binary(Reason), + type => Type + }}; {error, Reason} -> {error, Reason} end. diff --git a/apps/emqx_management/src/emqx_mgmt_api_configs.erl b/apps/emqx_management/src/emqx_mgmt_api_configs.erl index 75341facc..56e1f9bc1 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_configs.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_configs.erl @@ -364,10 +364,10 @@ configs(get, #{query_string := QueryStr, headers := Headers}, _Req) -> {error, _} = Error -> {400, #{code => 'INVALID_ACCEPT', message => ?ERR_MSG(Error)}} end; configs(put, #{body := Conf, query_string := #{<<"mode">> := Mode} = QS}, _Req) -> - IngnoreReadonly = maps:get(<<"ignore_readonly">>, QS, false), + IgnoreReadonly = maps:get(<<"ignore_readonly">>, QS, false), case emqx_conf_cli:load_config(Conf, #{ - mode => Mode, log => none, ignore_readonly => IngnoreReadonly + mode => Mode, log => none, ignore_readonly => IgnoreReadonly }) of ok -> From 623845d07db984c6186d51be8c6bdce71860e63b Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jun 2024 15:22:56 +0800 Subject: [PATCH 3/5] fix: don't allow set active_n to negative int --- apps/emqx/src/emqx_schema.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 29c201ad6..334d2cf27 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -965,7 +965,7 @@ fields("tcp_opts") -> [ {"active_n", sc( - integer(), + non_neg_integer(), #{ default => 100, desc => ?DESC(fields_tcp_opts_active_n) From 2b1fa1711b0cc8f0221393959cb075a89717cb6c Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jun 2024 17:04:52 +0800 Subject: [PATCH 4/5] fix: observer command crash when can't find object code --- apps/emqx_modules/src/emqx_observer_cli.erl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/emqx_modules/src/emqx_observer_cli.erl b/apps/emqx_modules/src/emqx_observer_cli.erl index 9359392c6..043b1430e 100644 --- a/apps/emqx_modules/src/emqx_observer_cli.erl +++ b/apps/emqx_modules/src/emqx_observer_cli.erl @@ -46,8 +46,13 @@ cmd(["load", Mod]) -> Nodes -> case emqx_utils:safe_to_existing_atom(Mod) of {ok, Module} -> - Res = recon:remote_load(Nodes, Module), - emqx_ctl:print("Loaded ~p module on ~p: ~p~n", [Module, Nodes, Res]); + case code:get_object_code(Module) of + error -> + emqx_ctl:print("Module(~s)'s object code not found~n", [Mod]); + _ -> + Res = recon:remote_load(Nodes, Module), + emqx_ctl:print("Loaded ~p module on ~p: ~p~n", [Module, Nodes, Res]) + end; {error, Reason} -> emqx_ctl:print("Module(~s) not found: ~p~n", [Mod, Reason]) end From 0eee2edd28af9c800dcc44bc97a89ab8f02fe4dd Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Thu, 13 Jun 2024 10:44:29 +0800 Subject: [PATCH 5/5] test: fix api_config SUITE failed --- .../test/emqx_mgmt_api_configs_SUITE.erl | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl index 496192e39..d5ede7057 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_api_configs_SUITE.erl @@ -310,7 +310,7 @@ t_configs_key(_Config) -> ReadOnlyBin = iolist_to_binary(hocon_pp:do(ReadOnlyConf, #{})), {error, ReadOnlyError} = update_configs_with_binary(ReadOnlyBin), ?assertEqual(<<"{\"errors\":\"Cannot update read-only key 'cluster'.\"}">>, ReadOnlyError), - ?assertMatch({ok, <<>>}, update_configs_with_binary(ReadOnlyBin, _InogreReadonly = true)), + ?assertMatch({ok, <<>>}, update_configs_with_binary(ReadOnlyBin, _IgnoreReadonly = true)), ok. t_get_configs_in_different_accept(_Config) -> @@ -444,13 +444,38 @@ t_create_webhook_v1_bridges_api(Config) -> ok. t_config_update_parse_error(_Config) -> - ?assertMatch( - {error, <<"{\"errors\":\"{parse_error,", _/binary>>}, - update_configs_with_binary(<<"not an object">>) + BadHoconList = [ + <<"not an object">>, + <<"a = \"tlsv1\"\"\"3e-01">> + ], + lists:map( + fun(BadHocon) -> + {error, ParseError} = update_configs_with_binary(BadHocon), + ?assertMatch( + #{ + <<"errors">> := + #{ + <<"line">> := 1, + <<"reason">> := _, + <<"type">> := <<"parse_error">> + } + }, + emqx_utils_json:decode(ParseError) + ) + end, + BadHoconList ), + + {error, ScanError} = update_configs_with_binary(<<"a=测试"/utf8>>), ?assertMatch( - {error, <<"{\"errors\":\"{parse_error,", _/binary>>}, - update_configs_with_binary(<<"a = \"tlsv1\"\"\"3e-01">>) + #{ + <<"errors">> := #{ + <<"line">> := 1, + <<"reason">> := _, + <<"type">> := <<"scan_error">> + } + }, + emqx_utils_json:decode(ScanError) ). t_config_update_unknown_root(_Config) ->