Atomic multi-key transactions for Concord.
A transaction is a one-shot, atomic operation that:
- Evaluates compare predicates against pre-transaction state
- If all hold (AND), executes the
successbranch - Otherwise, executes the
failurebranch - Returns
{:ok, %Result{}}— never{:error, ...}for compare failures
Transaction Spec
%{
compare: [compare()],
success: [operation()],
failure: [operation()]
}Examples
# Atomic create-if-absent
Concord.Txn.commit(%{
compare: [{:exists, "/key", :==, false}],
success: [{:put, "/key", value, %{}}],
failure: [{:get, {:key, "/key"}, %{}}]
})
# Conditional update with revision check
Concord.Txn.commit(%{
compare: [{:mod_revision, "/key", :==, 1842}],
success: [{:put, "/key", new_value, %{prev_kv: true}}],
failure: [{:get, {:key, "/key"}, %{}}]
})
Summary
Functions
Commits a transaction spec atomically.
Functions
@spec commit( map(), keyword() ) :: {:ok, Concord.Txn.Result.t()} | {:error, term()}
Commits a transaction spec atomically.
Options
:idempotency_key— string key for safe retry (optional):timeout— operation timeout in ms (default: 5000)
Returns
{:ok, %Result{succeeded: true, ...}}— success branch ran{:ok, %Result{succeeded: false, ...}}— failure branch ran (not an error){:error, {:invalid_txn, reason}}— spec validation failed{:error, reason}— cluster error (:no_leader, :timeout, etc.)