Mnesiac.Store behaviour (Mnesiac v0.3.9) 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.
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 ths store's configuration as a keyword list. For more information on the options supported here, see mnesia's documenatation.
Link to this section Callbacks
Specs
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
Specs
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
Specs
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.
Specs
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.