View Source Memento.Transaction (Memento v0.3.2)
Memento's wrapper around Mnesia transactions. This module exports
methods execute/2
and execute_sync/2
, and their bang versions,
which accept a function to be executed and an optional argument to
set the maximum no. of retries until the transaction succeeds.
execute/1
and execute!/1
can be directly called from the base
Memento
module as the alias Memento.transaction/1
and
Memento.transaction!/1
methods, but if you want to specify a
custom retries
value or use the synchronous version, you should
use the methods in this module.
examples
Examples
# Read a User record
{:ok, user} =
Memento.transaction fn ->
Memento.Query.read(User, id)
end
# Get all Users, raising errors on aborts
users =
Memento.transaction! fn ->
Memento.Query.all(User)
end
# Update a User record on all nodes synchronously,
# with a maximum of 5 retries
operation = fn ->
Memento.Query.write(%User{id: 3, name: "New Value"})
end
Memento.Transaction.execute_sync(operation, 5)
Link to this section Summary
Functions
Aborts a Memento transaction.
Execute passed function as part of an Mnesia transaction.
Same as execute/2
but returns the result or raises an error.
Execute the transaction in synchronization with all nodes.
Same as execute_sync/2
but returns the result or raises an error.
Checks if you are inside a transaction.
Link to this section Types
Specs
retries() :: :infinity | non_neg_integer()
Maximum no. of retries for a transaction
Link to this section Functions
Specs
Aborts a Memento transaction.
Causes the transaction to return an error tuple with the passed
argument: {:error, {:transaction_aborted, reason}}
. Outside
the context of a transaction, simply raises an error.
In the bang versions of the transactions, it raises a
Memento.TransactionAborted
error instead of returning the
error tuple. Default value for reason is :no_reason_given
.
Specs
Execute passed function as part of an Mnesia transaction.
Default value of retries
is :infinity
. Returns either
{:ok, result}
or {:error, reason}
. Also see
:mnesia.transaction/2
.
Specs
Same as execute/2
but returns the result or raises an error.
Specs
Execute the transaction in synchronization with all nodes.
This method waits until the data has been committed and logged to disk (if used) on all involved nodes before it finishes. This is useful to ensure that a transaction process does not overload the databases on other nodes.
Returns either {:ok, result}
or {:error, reason}
. Also see
:mnesia.sync_transaction/2
.
Specs
Same as execute_sync/2
but returns the result or raises an error.
Specs
inside?() :: boolean()
Checks if you are inside a transaction.