View Source Mnesiac.Store behaviour (Mnesiac v0.3.13)

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

resolve_conflict(node)

View Source (optional)
@callback 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

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.