fix: api_listener crash when setting max_connnections as string
This commit is contained in:
parent
d41a23b7d0
commit
091c49277f
|
@ -116,6 +116,7 @@ format_raw_listeners({Type0, Conf}) ->
|
||||||
fun
|
fun
|
||||||
({LName, LConf0}) when is_map(LConf0) ->
|
({LName, LConf0}) when is_map(LConf0) ->
|
||||||
Bind = parse_bind(LConf0),
|
Bind = parse_bind(LConf0),
|
||||||
|
MaxConn = maps:get(<<"max_connections">>, LConf0, default_max_conn()),
|
||||||
Running = is_running(Type, listener_id(Type, LName), LConf0#{bind => Bind}),
|
Running = is_running(Type, listener_id(Type, LName), LConf0#{bind => Bind}),
|
||||||
LConf1 = maps:remove(<<"authentication">>, LConf0),
|
LConf1 = maps:remove(<<"authentication">>, LConf0),
|
||||||
LConf2 = maps:put(<<"running">>, Running, LConf1),
|
LConf2 = maps:put(<<"running">>, Running, LConf1),
|
||||||
|
@ -124,7 +125,10 @@ format_raw_listeners({Type0, Conf}) ->
|
||||||
true -> current_conns(Type, LName, Bind);
|
true -> current_conns(Type, LName, Bind);
|
||||||
false -> 0
|
false -> 0
|
||||||
end,
|
end,
|
||||||
LConf = maps:put(<<"current_connections">>, CurrConn, LConf2),
|
LConf = maps:merge(LConf2, #{
|
||||||
|
<<"current_connections">> => CurrConn,
|
||||||
|
<<"max_connections">> => ensure_max_conns(MaxConn)
|
||||||
|
}),
|
||||||
{true, {Type0, LName, LConf}};
|
{true, {Type0, LName, LConf}};
|
||||||
({_LName, _MarkDel}) ->
|
({_LName, _MarkDel}) ->
|
||||||
false
|
false
|
||||||
|
@ -994,3 +998,7 @@ unregister_ocsp_stapling_refresh(Type, Name) ->
|
||||||
|
|
||||||
default_max_conn() ->
|
default_max_conn() ->
|
||||||
<<"infinity">>.
|
<<"infinity">>.
|
||||||
|
|
||||||
|
ensure_max_conns(<<"infinity">>) -> <<"infinity">>;
|
||||||
|
ensure_max_conns(MaxConn) when is_binary(MaxConn) -> binary_to_integer(MaxConn);
|
||||||
|
ensure_max_conns(MaxConn) -> MaxConn.
|
||||||
|
|
|
@ -668,7 +668,13 @@ format_status(Key, Node, Listener, Acc) ->
|
||||||
|
|
||||||
max_conn(_Int1, <<"infinity">>) -> <<"infinity">>;
|
max_conn(_Int1, <<"infinity">>) -> <<"infinity">>;
|
||||||
max_conn(<<"infinity">>, _Int) -> <<"infinity">>;
|
max_conn(<<"infinity">>, _Int) -> <<"infinity">>;
|
||||||
max_conn(Int1, Int2) -> Int1 + Int2.
|
max_conn(Int1, Int2) -> int(Int1) + int(Int2).
|
||||||
|
|
||||||
|
%% If we set max_connections = “123”,
|
||||||
|
%% it will be converted to #{<<"max_connections">> => <<"123">>} in the raw_conf with no error.
|
||||||
|
%% so we need to convert it to integer, we should fix this at hocon lib in the future.
|
||||||
|
int(Bin) when is_binary(Bin) -> binary_to_integer(Bin);
|
||||||
|
int(Int) when is_integer(Int) -> Int.
|
||||||
|
|
||||||
listener_type_status_example() ->
|
listener_type_status_example() ->
|
||||||
[
|
[
|
||||||
|
|
|
@ -140,6 +140,16 @@ t_list_listeners(Config) when is_list(Config) ->
|
||||||
?assertMatch(#{<<"max_connections">> := <<"infinity">>}, Create),
|
?assertMatch(#{<<"max_connections">> := <<"infinity">>}, Create),
|
||||||
?assert(is_running(NewListenerId)),
|
?assert(is_running(NewListenerId)),
|
||||||
|
|
||||||
|
Update2 = request(put, NewPath, [], Create#{<<"max_connections">> => 100}),
|
||||||
|
?assertMatch(#{<<"max_connections">> := 100}, Update2),
|
||||||
|
Get2 = request(get, NewPath, [], []),
|
||||||
|
?assertMatch(#{<<"max_connections">> := 100}, Get2),
|
||||||
|
|
||||||
|
Update3 = request(put, NewPath, [], Create#{<<"max_connections">> => <<"123">>}),
|
||||||
|
?assertMatch(#{<<"max_connections">> := 123}, Update3),
|
||||||
|
Get3 = request(get, NewPath, [], []),
|
||||||
|
?assertMatch(#{<<"max_connections">> := 123}, Get3),
|
||||||
|
|
||||||
%% delete
|
%% delete
|
||||||
?assertEqual([], delete(NewPath)),
|
?assertEqual([], delete(NewPath)),
|
||||||
?assertEqual({error, not_found}, is_running(NewListenerId)),
|
?assertEqual({error, not_found}, is_running(NewListenerId)),
|
||||||
|
|
Loading…
Reference in New Issue