Add Cluster.Supervisor directly to application supervision tree
This commit is contained in:
parent
35224327c0
commit
14ffefe2e9
2 changed files with 20 additions and 12 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue