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)
# {Aprsme.Worker, arg}
{Registry, keys: :duplicate, name: Registry.PubSub, partitions: System.schedulers_online()},
# Start clustering
Aprsme.Cluster.Topology,
# Start Oban for background jobs
{Oban, :aprsme |> Application.get_env(Oban, []) |> Keyword.put(:queues, default: 10, maintenance: 2)},
Aprsme.Presence,
@ -101,17 +99,27 @@ defmodule Aprsme.Application do
defp maybe_add_cluster_components(children) 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
Aprsme.DynamicSupervisor,
# Leader election process
Aprsme.Cluster.LeaderElection,
# Connection manager that starts/stops APRS-IS based on leadership
Aprsme.Cluster.ConnectionManager,
# Packet receiver for distributed packets on non-leader nodes
Aprsme.Cluster.PacketReceiver
]
else
[
{Cluster.Supervisor, [topologies, [name: Aprsme.ClusterSupervisor]]},
Aprsme.DynamicSupervisor,
Aprsme.Cluster.LeaderElection,
Aprsme.Cluster.ConnectionManager,
Aprsme.Cluster.PacketReceiver
]
end
children ++ cluster_children
else
children
end

View file

@ -7,10 +7,10 @@ defmodule Aprsme.Cluster.Topology do
def child_spec(opts) do
if Application.get_env(:aprsme, :cluster_enabled, false) do
topologies = Application.get_env(:libcluster, :topologies, [])
# Log the configuration for debugging
Logger.info("Cluster.Topology starting with topologies: #{inspect(topologies)}")
# Ensure we have valid topologies
if topologies == [] or topologies == nil do
Logger.warning("No libcluster topologies configured, clustering will not work")