-module(nquic_server_sup).
-moduledoc """
Per-partition connection supervisor (`simple_one_for_one`).
One instance per scheduler is started under `nquic_partitions_sup`.
Connections are routed to a partition by hashing the DCID, distributing
supervision load across schedulers. Each partition publishes its pid to
the listener's dispatch table on init so `nquic_dispatch:start_conn_child/3`
can find it without going through a republish step on partition restart.
""".
-behaviour(supervisor).
-export([start_link/2]).
-export([init/1]).
-spec init({nquic_dispatch:t(), pos_integer()}) ->
{ok, {supervisor:sup_flags(), [supervisor:child_spec()]}}.
init({Dispatch, Idx}) ->
nquic_dispatch:set_partition(Dispatch, Idx, self()),
SupFlags = #{
strategy => simple_one_for_one,
intensity => 10,
period => 5
},
ChildSpecs = [
#{
id => nquic_conn,
start => {nquic_conn_launcher, start_link, []},
restart => temporary,
shutdown => 5000,
type => worker,
modules => [nquic_conn_launcher, nquic_conn_statem]
}
],
{ok, {SupFlags, ChildSpecs}}.
-doc "Start one partition supervisor with its dispatch handle and 1-based index.".
-spec start_link(nquic_dispatch:t(), pos_integer()) ->
{ok, pid()} | ignore | {error, term()}.
start_link(Dispatch, Idx) ->
supervisor:start_link(?MODULE, {Dispatch, Idx}).