ExStorageService.Cluster.Transport behaviour (ex_storage_service v0.6.2)

Copy Markdown View Source

Content-addressed transport contract for blob operations between cluster nodes.

Core code depends only on this behaviour. Concrete transports live outside the core application so their protocol dependencies do not leak into the storage domain.

Summary

Types

blob_info()

@type blob_info() :: %{hash: String.t(), size: non_neg_integer()}

node_ref()

@type node_ref() :: term()

options()

@type options() :: keyword()

range()

@type range() :: nil | :all | {non_neg_integer(), non_neg_integer()}

staged_source()

Callbacks

delete_blob(t, node_ref, t, options)

@callback delete_blob(ExStorageService.Context.t(), node_ref(), String.t(), options()) ::
  :ok | {:error, term()}

head_blob(t, node_ref, t, options)

@callback head_blob(ExStorageService.Context.t(), node_ref(), String.t(), options()) ::
  {:ok, blob_info()} | {:error, term()}

health(t, node_ref, options)

@callback health(ExStorageService.Context.t(), node_ref(), options()) ::
  :ok | {:error, term()}

open_blob(t, node_ref, t, range, options)

@callback open_blob(
  ExStorageService.Context.t(),
  node_ref(),
  String.t(),
  range(),
  options()
) ::
  {:ok, ExStorageService.BlobStore.Source.t()} | {:error, term()}

put_blob(t, node_ref, staged_source, t, options)