ExStorageService.InstanceConfig (ex_storage_service v0.6.3)

Copy Markdown View Source

Validated configuration for one storage instance.

Standalone remains the default. Cluster metadata, private transport, node control state, and replica-quorum values are typed and validated. Public cluster S3 remains off by default and requires explicit data-plane activation.

Summary

Types

cluster_member()

@type cluster_member() :: %{id: String.t(), endpoint: node()}

cluster_topology()

@type cluster_topology() :: :none | :static | :dns

metadata_schema()

@type metadata_schema() :: :v1 | :v2

mode()

@type mode() :: :standalone | :cluster

node_role()

@type node_role() :: :data | :metadata

t()

@type t() :: %ExStorageService.InstanceConfig{
  allow_degraded_writes: boolean(),
  auto_start: boolean(),
  blob_root: String.t(),
  cluster_bootstrap: boolean(),
  cluster_data_plane_enabled: boolean(),
  cluster_members: [cluster_member()],
  cluster_name: String.t(),
  cluster_seeds: [node() | String.t()],
  cluster_topology: cluster_topology(),
  data_root: String.t(),
  erlang_cookie: atom(),
  erlang_node: node(),
  instance: atom() | String.t(),
  internal_advertised_url: String.t() | nil,
  internal_auth_skew_seconds: pos_integer(),
  internal_bind: :inet.ip_address(),
  internal_port: :inet.port_number(),
  internal_secret: String.t() | nil,
  internal_tls_certfile: String.t() | nil,
  internal_tls_keyfile: String.t() | nil,
  internal_transport_enabled: boolean(),
  metadata_root: String.t(),
  metadata_schema: metadata_schema(),
  mode: mode(),
  node_capacity: pos_integer() | nil,
  node_draining: boolean(),
  node_enabled: boolean(),
  node_generation: pos_integer(),
  node_id: String.t(),
  node_role: node_role(),
  node_zone: String.t() | nil,
  orphan_grace_seconds: pos_integer(),
  public_s3_enabled: boolean(),
  ra_root: String.t(),
  repair_concurrency: pos_integer(),
  replica_concurrency: pos_integer(),
  replication_factor: pos_integer(),
  tmp_root: String.t(),
  web_enabled: boolean(),
  workers: %{required(atom()) => boolean()},
  write_quorum: pos_integer()
}

Functions

from_application_env()

@spec from_application_env() :: {:ok, t()} | {:error, String.t()}

new(config)

@spec new(keyword() | map()) :: {:ok, t()} | {:error, String.t()}

worker_defaults()

@spec worker_defaults() :: map()

worker_enabled?(instance_config, worker)

@spec worker_enabled?(t(), atom()) :: boolean()