From d59eef5c737d0b08eb8c16c5316300e863bc935c Mon Sep 17 00:00:00 2001 From: juhlig Date: Wed, 8 May 2019 15:05:27 +0200 Subject: Add the num_conns_sups option This new option allows configuring the number of connection supervisors. The old behavior can be obtained by setting this value to 1. A value larger than num_acceptors will result in some connection supervisors not being used as the acceptors currently only use one connection supervisor. --- test/acceptor_SUITE.erl | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'test') diff --git a/test/acceptor_SUITE.erl b/test/acceptor_SUITE.erl index dce006a..386bf68 100644 --- a/test/acceptor_SUITE.erl +++ b/test/acceptor_SUITE.erl @@ -69,6 +69,10 @@ groups() -> ]}, {supervisor, [ connection_type_supervisor, connection_type_supervisor_separate_from_connection, + supervisor_10_acceptors_1_conns_sup, + supervisor_9_acceptors_4_conns_sups, + supervisor_10_acceptors_10_conns_sups, + supervisor_1_acceptor_10_conns_sups, supervisor_changed_options_restart, supervisor_clean_child_restart, supervisor_clean_restart, @@ -967,6 +971,58 @@ connection_type_supervisor_separate_from_connection(_) -> {'EXIT', _} = begin catch ranch:get_port(Name) end, ok. +supervisor_10_acceptors_1_conns_sup(_) -> + doc("Ensure that using 10 acceptors and 1 connection supervisor works."), + ok = do_supervisor_n_acceptors_m_conns_sups(10, 1). + +supervisor_9_acceptors_4_conns_sups(_) -> + doc("Ensure that using 9 acceptors and 4 connection supervisors works."), + ok = do_supervisor_n_acceptors_m_conns_sups(9, 4). + +supervisor_10_acceptors_10_conns_sups(_) -> + doc("Ensure that using 10 acceptors and 10 connection supervisors works."), + ok = do_supervisor_n_acceptors_m_conns_sups(10, 10). + +supervisor_1_acceptor_10_conns_sups(_) -> + doc("Ensure that using 1 acceptor and 10 connection supervisors works."), + ok = do_supervisor_n_acceptors_m_conns_sups(1, 10). + +do_supervisor_n_acceptors_m_conns_sups(NumAcceptors, NumConnsSups) -> + Name = name(), + {ok, Pid} = ranch:start_listener(Name, + ranch_tcp, #{num_conns_sups => NumConnsSups, num_acceptors => NumAcceptors}, + notify_and_wait_protocol, [{msg, connected}, {pid, self()}]), + Port = ranch:get_port(Name), + ConnsSups = [ConnsSup || {_, ConnsSup} <- ranch_server:get_connections_sups(Name)], + NumConnsSups = length(ConnsSups), + {ranch_acceptors_sup, AcceptorsSup, supervisor, _} = + lists:keyfind(ranch_acceptors_sup, 1, supervisor:which_children(Pid)), + AcceptorIds = [AcceptorId || + {{acceptor, _, AcceptorId}, _, worker, _} <- supervisor:which_children(AcceptorsSup)], + NumAcceptors = length(AcceptorIds), + AcceptorConnsSups0 = [ranch_server:get_connections_sup(Name, AcceptorId) || + AcceptorId <- AcceptorIds], + AcceptorConnsSups1 = lists:usort(AcceptorConnsSups0), + if + NumAcceptors > NumConnsSups -> + NumConnsSups = length(AcceptorConnsSups1), + [] = ConnsSups -- AcceptorConnsSups1; + NumAcceptors < NumConnsSups -> + NumAcceptors = length(AcceptorConnsSups1), + [] = AcceptorConnsSups1 -- ConnsSups; + NumAcceptors =:= NumConnsSups -> + NumConnsSups = length(AcceptorConnsSups1), + NumAcceptors = length(AcceptorConnsSups1), + [] = ConnsSups -- AcceptorConnsSups1, + [] = AcceptorConnsSups1 -- ConnsSups + end, + ok = connect_loop(Port, 100, 0), + 100 = receive_loop(connected, 100), + 100 = ranch_server:count_connections(Name), + ok = ranch:stop_listener(Name), + {'EXIT', _} = begin catch ranch:get_port(Name) end, + ok. + supervisor_changed_options_restart(_) -> doc("Ensure that a listener is restarted with changed transport options."), Name = name(), -- cgit v1.2.3