Mnesiac v0.3.3 Mnesiac.Store behaviour View Source
This module defines a mnesiac store and contains overridable callbacks.
Link to this section Summary
Callbacks
This function is called by mnesiac when it joins a mnesia cluster and data for this store is found on the remote node in the cluster that is being connected to.
Default Implementation
def copy_store do
for type <- [:ram_copies, :disc_copies, :disc_only_copies] do
value = Keyword.get(store_options(), type, [])
This function is called by mnesiac either when it has no existing data to use or copy and will initialise a table
Default Implementation
def init_store do
:mnesia.create_table(Keyword.get(store_options(), :record_name, __MODULE__), store_options())
end
This function is called by mnesiac when it has detected data for a table on both the local node and the remote node of the cluster it is connecting to.
Default Implementation
def resolve_conflict(cluster_node) do
table_name = Keyword.get(store_options(), :record_name, __MODULE__)
Logger.info(fn -> "[mnesiac:#{node()}] #{inspect(table_name)}: data found on both sides, copy aborted." end)
This function returns ths store's configuration as a keyword list. For more information on the options supported here, see mnesia's documenatation.
Examples
iex> store_options()
[attributes: [...], index: [:topic_id], disc_copies: [node()]]
Note: Defining :record_name
in store_options()
will set the mnesia table name to the same
Link to this section Callbacks
copy_store()
View Source
(optional)
copy_store() :: term()
copy_store() :: term()
This function is called by mnesiac when it joins a mnesia cluster and data for this store is found on the remote node in the cluster that is being connected to.
Default Implementation
def copy_store do
for type <- [:ram_copies, :disc_copies, :disc_only_copies] do
value = Keyword.get(store_options(), type, [])
if Enum.member?(value, node()) do
:mnesia.add_table_copy(Keyword.get(store_options(), :record_name, __MODULE__), node(), type)
end
end
end
init_store()
View Source
(optional)
init_store() :: term()
init_store() :: term()
This function is called by mnesiac either when it has no existing data to use or copy and will initialise a table
Default Implementation
def init_store do
:mnesia.create_table(Keyword.get(store_options(), :record_name, __MODULE__), store_options())
end
resolve_conflict(node) View Source (optional)
This function is called by mnesiac when it has detected data for a table on both the local node and the remote node of the cluster it is connecting to.
Default Implementation
def resolve_conflict(cluster_node) do
table_name = Keyword.get(store_options(), :record_name, __MODULE__)
Logger.info(fn -> "[mnesiac:#{node()}] #{inspect(table_name)}: data found on both sides, copy aborted." end)
:ok
end
Note: The default implementation for this function is to do nothing.
store_options()
View Source
store_options() :: term()
store_options() :: term()
This function returns ths store's configuration as a keyword list. For more information on the options supported here, see mnesia's documenatation.
Examples
iex> store_options()
[attributes: [...], index: [:topic_id], disc_copies: [node()]]
Note: Defining :record_name
in store_options()
will set the mnesia table name to the same.