Storage behaviour and facade for job persistence.
Application code should prefer Kathikon.insert/3 and management APIs.
Configure the backend via config :kathikon, storage_backend: module.
Default: Kathikon.Storage.Mnesia.
Examples
:ok = Kathikon.Storage.setup()
# Tests and Livebook embedding
Kathikon.Storage.reset!()See docs/storage.md.
Summary
Types
@type job() :: Kathikon.Job.t() | map()
Callbacks
@callback all() :: [Kathikon.Job.t()]
@callback claim(atom(), DateTime.t()) :: {:ok, Kathikon.Job.t()} | :not_found | {:error, term()}
@callback claim_and_start_available_jobs(atom(), pos_integer(), map()) :: {:ok, [map()]} | {:ok, [Kathikon.Job.t()]} | {:error, term()}
@callback claim_available_jobs(atom(), pos_integer(), map()) :: {:ok, [map()]} | {:ok, [Kathikon.Job.t()]} | {:error, term()}
@callback claim_job(String.t(), map()) :: {:ok, map()} | {:ok, Kathikon.Job.t()} | {:error, :not_found | :already_claimed | :not_claimable | term()}
@callback clear_jobs!() :: :ok
@callback defer_job(String.t(), DateTime.t(), map()) :: {:ok, map()} | {:ok, Kathikon.Job.t()} | {:error, term()}
@callback delete(String.t()) :: :ok
@callback fetch(String.t()) :: {:ok, Kathikon.Job.t()} | {:error, term()}
@callback get_job(String.t()) :: {:ok, map()} | {:ok, Kathikon.Job.t()} | {:error, :not_found | term()}
@callback insert(Kathikon.Job.t()) :: {:ok, Kathikon.Job.t()} | {:error, term()}
@callback insert_job(job()) :: {:ok, String.t()} | {:ok, Kathikon.Job.t()} | {:error, term()}
@callback list_dead_jobs(keyword()) :: {:ok, [map()]} | {:ok, [Kathikon.Job.t()]} | {:error, term()}
@callback list_jobs(keyword()) :: {:ok, [map()]} | {:ok, [Kathikon.Job.t()]} | {:error, term()}
@callback list_jobs_page(keyword()) :: {:ok, %{jobs: [map()] | [Kathikon.Job.t()], total: non_neg_integer()}} | {:error, term()}
@callback promote_scheduled(DateTime.t()) :: non_neg_integer()
@callback prunable_jobs(DateTime.t()) :: [Kathikon.Job.t()]
@callback reset!() :: :ok
@callback retry_job( String.t(), keyword() ) :: {:ok, map()} | {:ok, Kathikon.Job.t()} | {:error, term()}
@callback setup() :: :ok
@callback start_job(Kathikon.Job.t(), map(), DateTime.t()) :: {:ok, Kathikon.Job.t()} | {:error, term()}
@callback update(Kathikon.Job.t()) :: {:ok, Kathikon.Job.t()} | {:error, term()}
@callback update_job(String.t(), map()) :: {:ok, map()} | {:ok, Kathikon.Job.t()} | {:error, :not_found | term()}