Packages
Distributed caching adapters for Nebulex
Current section
Files
Jump to
Current section
Files
lib/nebulex/adapters/replicated/supervisor.ex
defmodule Nebulex.Adapters.Replicated.Supervisor do
@moduledoc false
use Supervisor
alias Nebulex.Adapters.Replicated.{AntiEntropy, ClusterMonitor, Replicator}
## API
@doc false
def start_link(arg) do
Supervisor.start_link(__MODULE__, arg)
end
## Supervisor callback
@impl true
def init({cache, adapter_meta, primary_opts, buffer_opts}) do
primary = cache.__primary__()
children =
[
{primary, primary_opts},
Supervisor.child_spec(
{PartitionedBuffer.Map,
Keyword.merge(buffer_opts,
name: adapter_meta.inbox,
processor: {Replicator, :process_inbox, [adapter_meta]}
)},
id: adapter_meta.inbox
),
Supervisor.child_spec(
{PartitionedBuffer.Map,
Keyword.merge(buffer_opts,
name: adapter_meta.outbox,
processor: {Replicator, :process_outbox, [adapter_meta]}
)},
id: adapter_meta.outbox
),
{ClusterMonitor, adapter_meta}
] ++ maybe_anti_entropy(adapter_meta)
Supervisor.init(children, strategy: :rest_for_one)
end
defp maybe_anti_entropy(%{anti_entropy_interval: interval} = adapter_meta)
when is_integer(interval) do
[{AntiEntropy, adapter_meta}]
end
defp maybe_anti_entropy(_adapter_meta), do: []
end