Current section

Files

Jump to
quic src quic_sup.erl
Raw

src/quic_sup.erl

%%% -*- erlang -*-
%%%
%%% QUIC Application Supervisor
%%% RFC 9000 - QUIC: A UDP-Based Multiplexed and Secure Transport
%%%
%%% Copyright (c) 2024-2026 Benoit Chesneau
%%% Apache License 2.0
%%%
%%% @doc Top-level supervisor for the QUIC application.
%%%
%%% This module supervises:
%%% - quic_server_registry: ETS-based registry for named server lookup
%%% - quic_server_sup: Dynamic supervisor for server pools
%%%
%%% Supervision tree:
%%% ```
%%% quic_sup (one_for_one)
%%% |-- quic_server_registry (worker)
%%% `-- quic_server_sup (supervisor)
%%% |-- {server_name_1, quic_listener_sup} (supervisor)
%%% |-- {server_name_2, quic_listener_sup} (supervisor)
%%% `-- ...
%%% '''
-module(quic_sup).
-behaviour(supervisor).
-export([
start_link/0,
init/1
]).
%%====================================================================
%% API
%%====================================================================
%% @doc Start the top-level QUIC supervisor.
-spec start_link() -> {ok, pid()} | {error, term()}.
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
%%====================================================================
%% Supervisor callbacks
%%====================================================================
init([]) ->
SupFlags = #{
strategy => one_for_one,
intensity => 5,
period => 10
},
Children = [
#{
id => quic_server_registry,
start => {quic_server_registry, start_link, []},
restart => permanent,
shutdown => 5000,
type => worker,
modules => [quic_server_registry]
},
#{
id => quic_server_sup,
start => {quic_server_sup, start_link, []},
restart => permanent,
shutdown => infinity,
type => supervisor,
modules => [quic_server_sup]
}
],
{ok, {SupFlags, Children}}.