EctoLock (EctoLock v0.1.3) View Source

Provides helpers for advisory locks with postgresql

Link to this section Summary

Functions

Obtains an exclusive session-level advisory lock, waiting if necessary.

Obtains a shared session-level advisory lock, waiting if necessary.

Frees an exclusive session-level advisory lock held by current session

Frees all session-level advisory locks held by current session

Frees a shared transaction-level advisory lock held by current session

Obtains an exclusive transaction-level advisory lock, waiting if necessary.

Obtains a shared transaction-level advisory lock, waiting if necessary.

Obtains a shared session-level advisory lock, returning :ok if it was aquired, or :error if it wasn't possible

Obtains a shared session-level advisory lock, returning :ok if it was aquired, or :error if it wasn't possible

Obtains a shared transaction-level advisory xact_lock, returning :ok if it was aquired, or :error if it wasn't possible

Obtains a shared transaction-level advisory xact_lock, returning :ok if it was aquired, or :error if it wasn't possible

Turns a namespace + key tuple into a key

Link to this section Types

Specs

key() :: integer()

Specs

repo() :: module()

Specs

result() :: :ok | :error

Link to this section Functions

Link to this function

advisory_lock(repo, key, opts \\ [])

View Source

Specs

advisory_lock(repo(), key(), Keyword.t()) :: :ok

Obtains an exclusive session-level advisory lock, waiting if necessary.

Link to this function

advisory_lock_shared(repo, key, opts \\ [])

View Source

Specs

advisory_lock_shared(repo(), key(), Keyword.t()) :: result()

Obtains a shared session-level advisory lock, waiting if necessary.

Link to this function

advisory_unlock(repo, key, opts \\ [])

View Source

Specs

advisory_unlock(repo(), key(), Keyword.t()) :: result()

Frees an exclusive session-level advisory lock held by current session

Returns :ok if it was successfully released or :error if it wasn't

Link to this function

advisory_unlock_all(repo, opts \\ [])

View Source

Specs

advisory_unlock_all(repo(), Keyword.t()) :: :ok

Frees all session-level advisory locks held by current session

Link to this function

advisory_unlock_shared(repo, key, opts \\ [])

View Source

Specs

advisory_unlock_shared(repo(), key(), Keyword.t()) :: result()

Frees a shared transaction-level advisory lock held by current session

Returns :ok if it was successfully released or :error if it wasn't

Link to this function

advisory_xact_lock(repo, key, opts \\ [])

View Source

Specs

advisory_xact_lock(repo(), key(), Keyword.t()) :: :ok

Obtains an exclusive transaction-level advisory lock, waiting if necessary.

Link to this function

advisory_xact_lock_shared(repo, key, opts \\ [])

View Source

Specs

advisory_xact_lock_shared(repo(), key(), Keyword.t()) :: :ok

Obtains a shared transaction-level advisory lock, waiting if necessary.

Link to this function

try_advisory_lock(repo, key, opts \\ [])

View Source

Specs

try_advisory_lock(repo(), key(), Keyword.t()) :: result()

Obtains a shared session-level advisory lock, returning :ok if it was aquired, or :error if it wasn't possible

Link to this function

try_advisory_lock_shared(repo, key, opts \\ [])

View Source

Specs

try_advisory_lock_shared(repo(), key(), Keyword.t()) :: result()

Obtains a shared session-level advisory lock, returning :ok if it was aquired, or :error if it wasn't possible

Link to this function

try_advisory_xact_lock(repo, key, opts \\ [])

View Source

Specs

try_advisory_xact_lock(repo(), key(), Keyword.t()) :: result()

Obtains a shared transaction-level advisory xact_lock, returning :ok if it was aquired, or :error if it wasn't possible

Link to this function

try_advisory_xact_lock_shared(repo, key, opts \\ [])

View Source

Specs

try_advisory_xact_lock_shared(repo(), key(), Keyword.t()) :: result()

Obtains a shared transaction-level advisory xact_lock, returning :ok if it was aquired, or :error if it wasn't possible

Turns a namespace + key tuple into a key

Expects namespace to be either an atom or binary, and key to be an integer

If a key with more than 32 bits is given, collisions between different namespaces may happen.