| defmodule Plausible.Session.BalancerSupervisor do | |
| @moduledoc "Serialize session processing to avoid explicit locks" | |
| use Supervisor | |
| if Mix.env() in [:test, :ce_test, :e2e_test] do | |
| def size(), | |
| do: 10 | |
| else | |
| def size(), do: 100 | |
| end | |
| def start_link(_) do | |
| Supervisor.start_link(__MODULE__, size(), name: __MODULE__) | |
| end | |
| def init(size) do | |
| children = | |
| for id <- 1..size do | |
| %{ | |
| id: id, | |
| start: {Plausible.Session.Balancer, :start_link, [id]}, | |
| restart: :permanent | |
| } | |
| end | |
| Supervisor.init( | |
| [ | |
| {Registry, [keys: :unique, name: Plausible.Session.Balancer.Registry]} | children | |
| ], | |
| strategy: :one_for_one | |
| ) | |
| end | |
| end | |