View Source Mnesiac.Store behaviour (Mnesiac v0.3.11)
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.
This function is called by mnesiac either when it has no existing data to use or copy and will initialise a table
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.
This function returns the store's configuration as a keyword list. For more information on the options supported here, see mnesia's documentation.
Link to this section Callbacks
@callback 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
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
@callback 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
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
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.
@callback store_options() :: term()
This function returns the store's configuration as a keyword list. For more information on the options supported here, see mnesia's documentation.
examples
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.