Current section

Files

Jump to
eventstore lib event_store storage lock.ex
Raw

lib/event_store/storage/lock.ex

defmodule EventStore.Storage.Lock do
@moduledoc false
require Logger
alias EventStore.Sql.Statements
def try_acquire_exclusive_lock(conn, key, opts \\ []) do
case Postgrex.query(conn, Statements.try_advisory_lock(), [key], opts) do
{:ok, %Postgrex.Result{rows: [[true]]}} ->
:ok
{:ok, %Postgrex.Result{rows: [[false]]}} ->
{:error, :lock_already_taken}
{:error, _error} = reply ->
reply
end
end
def unlock(conn, key, opts \\ []) do
case Postgrex.query(conn, Statements.advisory_unlock(), [key], opts) do
{:ok, %Postgrex.Result{rows: [[true]]}} ->
:ok
{:ok, %Postgrex.Result{rows: [[false]]}} ->
:ok
{:error, _error} = reply ->
reply
end
end
end