diff --git a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl index 994d88b5d..e62923bc2 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl @@ -334,19 +334,12 @@ aggregate_listener_status( CurrAcc, RunningAcc ) -> - NMaxAcc = plus_max_connections(MaxAcc, Max), + NMaxAcc = emqx_gateway_utils:plus_max_connections(MaxAcc, Max), NRunning = aggregate_running(Running, RunningAcc), aggregate_listener_status(T, NMaxAcc, Current + CurrAcc, NRunning); aggregate_listener_status([], MaxAcc, CurrAcc, RunningAcc) -> {MaxAcc, CurrAcc, RunningAcc}. -plus_max_connections(_, infinity) -> - infinity; -plus_max_connections(infinity, _) -> - infinity; -plus_max_connections(A, B) when is_integer(A) andalso is_integer(B) -> - A + B. - aggregate_running(R, R) -> R; aggregate_running(R, undefined) -> R; aggregate_running(_, _) -> inconsistent. diff --git a/apps/emqx_gateway/src/emqx_gateway_http.erl b/apps/emqx_gateway/src/emqx_gateway_http.erl index 7aaaee9cb..58c201c75 100644 --- a/apps/emqx_gateway/src/emqx_gateway_http.erl +++ b/apps/emqx_gateway/src/emqx_gateway_http.erl @@ -161,7 +161,10 @@ max_connections_count(Config) -> Listeners = emqx_gateway_utils:normalize_config(Config), lists:foldl( fun({_, _, _, SocketOpts, _}, Acc) -> - Acc + proplists:get_value(max_connections, SocketOpts, 0) + emqx_gateway_utils:plus_max_connections( + Acc, + proplists:get_value(max_connections, SocketOpts, 0) + ) end, 0, Listeners @@ -588,10 +591,12 @@ sum_cluster_connections(List) -> %%-------------------------------------------------------------------- %% Internal funcs + sum_cluster_connections( [#{max_connections := Max, current_connections := Current} | T], MaxAcc, CurrAcc ) -> - sum_cluster_connections(T, MaxAcc + Max, Current + CurrAcc); + NMaxAcc = emqx_gateway_utils:plus_max_connections(MaxAcc, Max), + sum_cluster_connections(T, NMaxAcc, Current + CurrAcc); sum_cluster_connections([_ | T], MaxAcc, CurrAcc) -> sum_cluster_connections(T, MaxAcc, CurrAcc); sum_cluster_connections([], MaxAcc, CurrAcc) -> diff --git a/apps/emqx_gateway/src/emqx_gateway_utils.erl b/apps/emqx_gateway/src/emqx_gateway_utils.erl index d41b3c93b..b91e48354 100644 --- a/apps/emqx_gateway/src/emqx_gateway_utils.erl +++ b/apps/emqx_gateway/src/emqx_gateway_utils.erl @@ -45,7 +45,8 @@ is_running/2, global_chain/1, listener_chain/3, - find_gateway_definitions/0 + find_gateway_definitions/0, + plus_max_connections/2 ]). -export([stringfy/1]). @@ -607,3 +608,12 @@ ignore_lib_apps(Apps) -> wx ], [AppName || {AppName, _, _} <- Apps, not lists:member(AppName, LibApps)]. + +-spec plus_max_connections(non_neg_integer() | infinity, non_neg_integer() | infinity) -> + pos_integer() | infinity. +plus_max_connections(_, infinity) -> + infinity; +plus_max_connections(infinity, _) -> + infinity; +plus_max_connections(A, B) when is_integer(A) andalso is_integer(B) -> + A + B. diff --git a/apps/emqx_gateway/test/emqx_gateway_api_SUITE.erl b/apps/emqx_gateway/test/emqx_gateway_api_SUITE.erl index 091a81142..f1cfd26d0 100644 --- a/apps/emqx_gateway/test/emqx_gateway_api_SUITE.erl +++ b/apps/emqx_gateway/test/emqx_gateway_api_SUITE.erl @@ -439,6 +439,13 @@ t_listeners_max_conns(_) -> {200, [Listeners]} = request(get, "/gateways/stomp/listeners"), ?assertMatch(#{max_connections := <<"infinity">>}, Listeners), + {200, Gateways} = request(get, "/gateways"), + [StompGwOverview] = lists:filter( + fun(Gw) -> maps:get(name, Gw) =:= <<"stomp">> end, + Gateways + ), + ?assertMatch(#{max_connections := <<"infinity">>}, StompGwOverview), + {204, _} = request(delete, "/gateways/stomp/listeners/stomp:tcp:def"), {404, _} = request(get, "/gateways/stomp/listeners/stomp:tcp:def"), ok.