Packages

Otplabs-lib provides Horde and Mnesia Supervisor, Horde Registry and NodeObserver that loads nodes dynamically when they start. Those recives notitication when a node up and down and update Horde and mnesia cluster.

Current section

Files

Jump to
otplabs lib mnesia node_observer.ex
Raw

lib/mnesia/node_observer.ex

defmodule OTPLabs.Mnesia.NodeObserver do
@moduledoc ~S"""
This module is used for updateing Mnesia nodes dynamically.
"""
use GenServer
require Logger
@doc false
def start_link(_opts) do
Logger.log(:info, "Starting #{__MODULE__}")
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
@impl true
def init(state) do
Logger.log(:info, "init #{__MODULE__}")
:net_kernel.monitor_nodes(true, node_type: :visible)
{:ok, state}
end
@impl true
def handle_info({:nodeup, node, _node_type}, state) do
Logger.log(:info, "[#{__MODULE__}].handle_info :nodeup - #{inspect(node)} ")
Mnesiac.connect(node)
{:noreply, state}
end
@impl true
def handle_info({:nodedown, node, _node_type}, state) do
Logger.log(:info, "[#{__MODULE__}].handle_info :nodown - #{inspect(node)} ")
# :mnesia.change_config(:extra_db_nodes, Node.list())
{:noreply, state}
end
end