Merge pull request #11013 from HJianBo/fix-max-conns-in-gateway-lists-api
fix(gateway): fix 500 crash for '/gateways' endpoint
This commit is contained in:
commit
89ddd54c68
|
@ -334,19 +334,12 @@ aggregate_listener_status(
|
||||||
CurrAcc,
|
CurrAcc,
|
||||||
RunningAcc
|
RunningAcc
|
||||||
) ->
|
) ->
|
||||||
NMaxAcc = plus_max_connections(MaxAcc, Max),
|
NMaxAcc = emqx_gateway_utils:plus_max_connections(MaxAcc, Max),
|
||||||
NRunning = aggregate_running(Running, RunningAcc),
|
NRunning = aggregate_running(Running, RunningAcc),
|
||||||
aggregate_listener_status(T, NMaxAcc, Current + CurrAcc, NRunning);
|
aggregate_listener_status(T, NMaxAcc, Current + CurrAcc, NRunning);
|
||||||
aggregate_listener_status([], MaxAcc, CurrAcc, RunningAcc) ->
|
aggregate_listener_status([], MaxAcc, CurrAcc, RunningAcc) ->
|
||||||
{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, R) -> R;
|
||||||
aggregate_running(R, undefined) -> R;
|
aggregate_running(R, undefined) -> R;
|
||||||
aggregate_running(_, _) -> inconsistent.
|
aggregate_running(_, _) -> inconsistent.
|
||||||
|
|
|
@ -161,7 +161,10 @@ max_connections_count(Config) ->
|
||||||
Listeners = emqx_gateway_utils:normalize_config(Config),
|
Listeners = emqx_gateway_utils:normalize_config(Config),
|
||||||
lists:foldl(
|
lists:foldl(
|
||||||
fun({_, _, _, SocketOpts, _}, Acc) ->
|
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,
|
end,
|
||||||
0,
|
0,
|
||||||
Listeners
|
Listeners
|
||||||
|
@ -588,10 +591,12 @@ sum_cluster_connections(List) ->
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% Internal funcs
|
%% Internal funcs
|
||||||
|
|
||||||
sum_cluster_connections(
|
sum_cluster_connections(
|
||||||
[#{max_connections := Max, current_connections := Current} | T], MaxAcc, CurrAcc
|
[#{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(T, MaxAcc, CurrAcc);
|
sum_cluster_connections(T, MaxAcc, CurrAcc);
|
||||||
sum_cluster_connections([], MaxAcc, CurrAcc) ->
|
sum_cluster_connections([], MaxAcc, CurrAcc) ->
|
||||||
|
|
|
@ -45,7 +45,8 @@
|
||||||
is_running/2,
|
is_running/2,
|
||||||
global_chain/1,
|
global_chain/1,
|
||||||
listener_chain/3,
|
listener_chain/3,
|
||||||
find_gateway_definitions/0
|
find_gateway_definitions/0,
|
||||||
|
plus_max_connections/2
|
||||||
]).
|
]).
|
||||||
|
|
||||||
-export([stringfy/1]).
|
-export([stringfy/1]).
|
||||||
|
@ -607,3 +608,12 @@ ignore_lib_apps(Apps) ->
|
||||||
wx
|
wx
|
||||||
],
|
],
|
||||||
[AppName || {AppName, _, _} <- Apps, not lists:member(AppName, LibApps)].
|
[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.
|
||||||
|
|
|
@ -439,6 +439,13 @@ t_listeners_max_conns(_) ->
|
||||||
{200, [Listeners]} = request(get, "/gateways/stomp/listeners"),
|
{200, [Listeners]} = request(get, "/gateways/stomp/listeners"),
|
||||||
?assertMatch(#{max_connections := <<"infinity">>}, 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"),
|
{204, _} = request(delete, "/gateways/stomp/listeners/stomp:tcp:def"),
|
||||||
{404, _} = request(get, "/gateways/stomp/listeners/stomp:tcp:def"),
|
{404, _} = request(get, "/gateways/stomp/listeners/stomp:tcp:def"),
|
||||||
ok.
|
ok.
|
||||||
|
|
Loading…
Reference in New Issue