From eacdaffe3c06a6d23ab5e48db0ed8574095e9dd3 Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Fri, 13 Jan 2023 15:30:01 +0800 Subject: [PATCH 1/2] fix: default max_connections in raw config should be binary not atom --- apps/emqx/src/emqx_schema.erl | 2 +- .../test/emqx_mgmt_api_listeners_SUITE.erl | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index ed7e0a016..9a380e4bc 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -1647,7 +1647,7 @@ base_listener(Bind) -> sc( hoconsc:union([infinity, pos_integer()]), #{ - default => infinity, + default => <<"infinity">>, desc => ?DESC(base_listener_max_connections) } )}, diff --git a/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl b/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl index e5c47ac4d..b47e66189 100644 --- a/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl +++ b/apps/emqx_management/test/emqx_mgmt_api_listeners_SUITE.erl @@ -32,6 +32,25 @@ end_per_suite(_) -> emqx_conf:remove([listeners, tcp, new1], #{override_to => local}), emqx_mgmt_api_test_util:end_suite([emqx_conf]). +t_max_connection_default(_Config) -> + emqx_mgmt_api_test_util:end_suite([emqx_conf]), + Etc = filename:join(["etc", "emqx.conf.all"]), + ConfFile = emqx_common_test_helpers:app_path(emqx_conf, Etc), + Bin = <<"listeners.tcp.max_connection_test {bind = \"0.0.0.0:3883\"}">>, + ok = file:write_file(ConfFile, Bin, [append]), + emqx_mgmt_api_test_util:init_suite([emqx_conf]), + %% Check infinity is binary not atom. + #{<<"listeners">> := Listeners} = emqx_mgmt_api_listeners:do_list_listeners(), + Target = lists:filter( + fun(#{<<"id">> := Id}) -> Id =:= 'tcp:max_connection_test' end, + Listeners + ), + ?assertMatch([#{<<"max_connections">> := <<"infinity">>}], Target), + NewPath = emqx_mgmt_api_test_util:api_path(["listeners", "tcp:max_connection_test"]), + ?assertMatch(#{<<"max_connections">> := <<"infinity">>}, request(get, NewPath, [], [])), + emqx_conf:remove([listeners, tcp, max_connection_test], #{override_to => cluster}), + ok. + t_list_listeners(_) -> Path = emqx_mgmt_api_test_util:api_path(["listeners"]), Res = request(get, Path, [], []), @@ -54,12 +73,14 @@ t_list_listeners(_) -> OriginListener2 = maps:remove(<<"id">>, OriginListener), NewConf = OriginListener2#{ <<"name">> => <<"new">>, - <<"bind">> => <<"0.0.0.0:2883">> + <<"bind">> => <<"0.0.0.0:2883">>, + <<"max_connections">> := <<"infinity">> }, Create = request(post, Path, [], NewConf), ?assertEqual(lists:sort(maps:keys(OriginListener)), lists:sort(maps:keys(Create))), Get1 = request(get, NewPath, [], []), ?assertMatch(Create, Get1), + ?assertMatch(#{<<"max_connections">> := <<"infinity">>}, Create), ?assert(is_running(NewListenerId)), %% delete From cbebfdbb13ef81c651074e58546dda4a72405c1f Mon Sep 17 00:00:00 2001 From: Zhongwen Deng Date: Fri, 13 Jan 2023 16:07:49 +0800 Subject: [PATCH 2/2] chore: changelog for #9748 --- changes/v5.0.15/fix-9748-en.md | 1 + changes/v5.0.15/fix-9748-zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/v5.0.15/fix-9748-en.md create mode 100644 changes/v5.0.15/fix-9748-zh.md diff --git a/changes/v5.0.15/fix-9748-en.md b/changes/v5.0.15/fix-9748-en.md new file mode 100644 index 000000000..85f5896b2 --- /dev/null +++ b/changes/v5.0.15/fix-9748-en.md @@ -0,0 +1 @@ +Listeners not configured with `max_connections` will cause the cluster `/listeners` API to return 500 error. diff --git a/changes/v5.0.15/fix-9748-zh.md b/changes/v5.0.15/fix-9748-zh.md new file mode 100644 index 000000000..cab352e79 --- /dev/null +++ b/changes/v5.0.15/fix-9748-zh.md @@ -0,0 +1 @@ +监听器不配置 `max_connections` 时会导致集群 `/listeners` 接口返回 500 错误。