Add Cluster.Supervisor directly to application supervision tree

This commit is contained in:
Graham McIntire 2025-07-25 11:03:20 -05:00
parent 35224327c0
commit 14ffefe2e9
No known key found for this signature in database
2 changed files with 20 additions and 12 deletions

View file

@ -47,8 +47,6 @@ defmodule Aprsme.Application do
# Start a worker by calling: Aprsme.Worker.start_link(arg) # Start a worker by calling: Aprsme.Worker.start_link(arg)
# {Aprsme.Worker, arg} # {Aprsme.Worker, arg}
{Registry, keys: :duplicate, name: Registry.PubSub, partitions: System.schedulers_online()}, {Registry, keys: :duplicate, name: Registry.PubSub, partitions: System.schedulers_online()},
# Start clustering
Aprsme.Cluster.Topology,
# Start Oban for background jobs # Start Oban for background jobs
{Oban, :aprsme |> Application.get_env(Oban, []) |> Keyword.put(:queues, default: 10, maintenance: 2)}, {Oban, :aprsme |> Application.get_env(Oban, []) |> Keyword.put(:queues, default: 10, maintenance: 2)},
Aprsme.Presence, Aprsme.Presence,
@ -101,17 +99,27 @@ defmodule Aprsme.Application do
defp maybe_add_cluster_components(children) do defp maybe_add_cluster_components(children) do
if Application.get_env(:aprsme, :cluster_enabled, false) do if Application.get_env(:aprsme, :cluster_enabled, false) do
children ++ topologies = Application.get_env(:libcluster, :topologies, [])
[
# Packet receiver for distributed packets on non-leader nodes
cluster_children =
if topologies == [] do
[]
# libcluster supervisor
# Dynamic supervisor for processes managed by cluster leader # Dynamic supervisor for processes managed by cluster leader
Aprsme.DynamicSupervisor,
# Leader election process # Leader election process
Aprsme.Cluster.LeaderElection,
# Connection manager that starts/stops APRS-IS based on leadership # Connection manager that starts/stops APRS-IS based on leadership
Aprsme.Cluster.ConnectionManager, else
# Packet receiver for distributed packets on non-leader nodes [
Aprsme.Cluster.PacketReceiver {Cluster.Supervisor, [topologies, [name: Aprsme.ClusterSupervisor]]},
] Aprsme.DynamicSupervisor,
Aprsme.Cluster.LeaderElection,
Aprsme.Cluster.ConnectionManager,
Aprsme.Cluster.PacketReceiver
]
end
children ++ cluster_children
else else
children children
end end