From b4cffc581b27c5151cd5f79d75202ef48a596a4b Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jun 2024 14:41:34 +0800 Subject: [PATCH 1/7] 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 1ba71fb00..607f74451 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -890,7 +890,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 8aab919f74413c7cf5075b8a02ea593ad5123644 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jun 2024 15:11:09 +0800 Subject: [PATCH 2/7] 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 f0a1d785cad3424cff36c90b3808f4c37134eea5 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jun 2024 15:22:56 +0800 Subject: [PATCH 3/7] 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 607f74451..b6be28d21 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -970,7 +970,7 @@ fields("tcp_opts") -> [ {"active_n", sc( - integer(), + non_neg_integer(), #{ default => 100, desc => ?DESC(fields_tcp_opts_active_n) From ba3097dc56c5130b0d6d66a11fcb390123566c17 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Wed, 12 Jun 2024 17:04:52 +0800 Subject: [PATCH 4/7] 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 d94fcb9cfd65e1323c13352543e5e38cd584e18b Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Thu, 13 Jun 2024 10:44:29 +0800 Subject: [PATCH 5/7] 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 a2d4d21af..10906183b 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) -> @@ -443,13 +443,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) -> From 9ffe6420c2b571ab0a301fa0a9733983e8ab5838 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 5 Jul 2024 17:41:02 +0800 Subject: [PATCH 6/7] chore: add changelog for 13419 --- changes/ce/fix-13419.en.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/ce/fix-13419.en.md diff --git a/changes/ce/fix-13419.en.md b/changes/ce/fix-13419.en.md new file mode 100644 index 000000000..95f82e970 --- /dev/null +++ b/changes/ce/fix-13419.en.md @@ -0,0 +1 @@ +Fix garbled hints in crash log message when calling /configs API From 7d851872ec91f41d6aabeeb7ca35178e65b60cf5 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Fri, 5 Jul 2024 19:21:28 +0800 Subject: [PATCH 7/7] chore: update emqx_module's app version --- apps/emqx_modules/src/emqx_modules.app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/emqx_modules/src/emqx_modules.app.src b/apps/emqx_modules/src/emqx_modules.app.src index 233adf7ad..19caf6763 100644 --- a/apps/emqx_modules/src/emqx_modules.app.src +++ b/apps/emqx_modules/src/emqx_modules.app.src @@ -1,7 +1,7 @@ %% -*- mode: erlang -*- {application, emqx_modules, [ {description, "EMQX Modules"}, - {vsn, "5.0.26"}, + {vsn, "5.0.27"}, {modules, []}, {applications, [kernel, stdlib, emqx, emqx_ctl, observer_cli]}, {mod, {emqx_modules_app, []}},