Packages
ex_esdb
0.1.1
0.11.0
0.10.0
0.9.0
0.8.0
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14-alpha
0.0.13-alpha
0.0.12-alpha
0.0.11-alpha
0.0.10-alpha
0.0.9-alpha
0.0.8-alpha
0.0.6-alpha
0.0.5-alpha
0.0.4-alpha
0.0.3-alpha
0.0.2-alfa
0.0.1-alfa
ExESDB is a reincarnation of rabbitmq/khepri, specialized for use as a BEAM-native event store.
Current section
Files
Jump to
Current section
Files
lib/ex_esdb/leadership_system.ex
defmodule ExESDB.LeadershipSystem do
@moduledoc """
Supervisor for leadership and event emission components.
This supervisor manages components that are only active when this node
is the cluster leader. Uses :rest_for_one because EmitterSystem depends
on LeaderSystem.
Components:
- LeaderSystem: Leader election and management
- EmitterSystem: Event emission (depends on leadership)
"""
use Supervisor
alias ExESDB.Themes, as: Themes
@impl true
def init(opts) do
children = [
# LeaderSystem must start first
{ExESDB.LeaderSystem, opts},
# EmitterSystem depends on leadership
{ExESDB.EmitterSystem, opts}
]
IO.puts("#{Themes.leader_system(self(), "LeadershipSystem is UP")}")
# Use :rest_for_one because EmitterSystem depends on LeaderSystem
Supervisor.init(children,
strategy: :rest_for_one,
max_restarts: 5,
max_seconds: 30
)
end
def start_link(opts) do
Supervisor.start_link(__MODULE__, opts, name: __MODULE__)
end
def child_spec(opts) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, [opts]},
restart: :transient, # Can restart on normal shutdown
shutdown: :infinity,
type: :supervisor
}
end
end