Mnesiac v0.3.7 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.

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
Link to this callback

resolve_conflict(node)

View Source (optional)

Specs

resolve_conflict(node()) :: term()

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.