Jidoka.Session.Store behaviour (Jidoka v0.9.0)

Copy Markdown View Source

Behaviour and delegator for durable session storage.

Store implementations persist Jidoka.Session.Data values. Lease-aware stores also provide atomic claim, checkpoint, commit, renewal, and recovery transitions. Runtime clients and provider credentials never enter the store.

Summary

Callbacks

Atomically records a snapshot under an active lease.

Atomically claims a hibernated session for resume.

Atomically claims a session for a new request.

Atomically commits final session state and releases its lease.

Loads a session by its identifier.

Lists the sessions available to the store.

Persists a caller-managed or inactive session.

Atomically replaces an expired lease for crash recovery.

Atomically extends an active lease.

Functions

Persists one in-run snapshot under the current lease.

Claims a stored hibernated session for one resume worker.

Claims a session for one new request and rejects concurrent use.

Commits terminal or hibernated state under the current lease.

Loads a session through a store module or configured store tuple.

Lists sessions whose worker lease expired and which have a snapshot.

Lists sessions through a store module or configured store tuple.

Lists pending review requests across stored sessions.

Persists a session through a store module or configured store tuple.

Replaces an expired lease and returns a crash-recoverable session.

Extends the current session lease.

Types

store()

@type store() :: module() | {module(), keyword()}

Callbacks

checkpoint_session(t, t, t, keyword)

(optional)
@callback checkpoint_session(String.t(), String.t(), Jidoka.Snapshot.t(), keyword()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Atomically records a snapshot under an active lease.

claim_resume(t, keyword)

(optional)
@callback claim_resume(
  String.t(),
  keyword()
) :: {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Atomically claims a hibernated session for resume.

claim_session(t, t, keyword)

(optional)
@callback claim_session(String.t(), Jidoka.Turn.Request.t(), keyword()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Atomically claims a session for a new request.

commit_session(t, t, t, keyword)

(optional)
@callback commit_session(String.t(), String.t(), Jidoka.Session.Data.t(), keyword()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Atomically commits final session state and releases its lease.

get_session(t, keyword)

@callback get_session(
  String.t(),
  keyword()
) :: {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Loads a session by its identifier.

list_sessions(keyword)

@callback list_sessions(keyword()) :: {:ok, [Jidoka.Session.Data.t()]} | {:error, term()}

Lists the sessions available to the store.

put_session(t, keyword)

@callback put_session(
  Jidoka.Session.Data.t(),
  keyword()
) :: {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Persists a caller-managed or inactive session.

recover_session(t, keyword)

(optional)
@callback recover_session(
  String.t(),
  keyword()
) :: {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Atomically replaces an expired lease for crash recovery.

renew_session(t, t, keyword)

(optional)
@callback renew_session(String.t(), String.t(), keyword()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Atomically extends an active lease.

Functions

checkpoint_session(store, session_id, lease_id, snapshot, opts \\ [])

@spec checkpoint_session(
  store(),
  String.t(),
  String.t(),
  Jidoka.Snapshot.t(),
  keyword()
) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Persists one in-run snapshot under the current lease.

claim_resume(store, session_id, opts \\ [])

@spec claim_resume(store(), String.t(), keyword()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Claims a stored hibernated session for one resume worker.

claim_session(store, session_id, request, opts \\ [])

@spec claim_session(store(), String.t(), Jidoka.Turn.Request.t(), keyword()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Claims a session for one new request and rejects concurrent use.

commit_session(store, session_id, lease_id, session, opts \\ [])

@spec commit_session(
  store(),
  String.t(),
  String.t(),
  Jidoka.Session.Data.t(),
  keyword()
) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Commits terminal or hibernated state under the current lease.

get_session(store, session_id)

@spec get_session(store(), String.t()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Loads a session through a store module or configured store tuple.

list_recoverable(store, opts \\ [])

@spec list_recoverable(
  store(),
  keyword()
) :: {:ok, [Jidoka.Session.Data.t()]} | {:error, term()}

Lists sessions whose worker lease expired and which have a snapshot.

list_sessions(store)

@spec list_sessions(store()) :: {:ok, [Jidoka.Session.Data.t()]} | {:error, term()}

Lists sessions through a store module or configured store tuple.

pending_reviews(store)

@spec pending_reviews(store()) ::
  {:ok, [Jidoka.Review.Request.t()]} | {:error, term()}

Lists pending review requests across stored sessions.

put_session(store, session)

@spec put_session(store(), Jidoka.Session.Data.t()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Persists a session through a store module or configured store tuple.

recover_session(store, session_id, opts \\ [])

@spec recover_session(store(), String.t(), keyword()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Replaces an expired lease and returns a crash-recoverable session.

renew_session(store, session_id, lease_id, opts \\ [])

@spec renew_session(store(), String.t(), String.t(), keyword()) ::
  {:ok, Jidoka.Session.Data.t()} | {:error, term()}

Extends the current session lease.