ExStorageService.Cluster.Repair.Planner (ex_storage_service v0.6.2)

Copy Markdown View Source

Pure placement reconciliation plus bounded, deterministically owned scans.

The 256 SHA-256 prefix shards are assigned with the same rendezvous function used for blobs. Only the owner scans a shard; every emitted action is still revalidated by its handler because membership and page contents are live.

Summary

Types

plan()

@type plan() :: %{
  descriptor: ExStorageService.Metadata.Models.Blob.t(),
  desired: [map()],
  ready: [map()],
  ready_desired: [map()],
  missing: [map()],
  excess: [map()],
  sources: [map()],
  topology_fingerprint: binary()
}

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

owned_shards(node_id, members)

@spec owned_shards(binary(), [map()]) :: [binary()]

owner(shard, members)

@spec owner(binary(), [map()]) :: {:ok, binary()} | {:error, term()}

plan_blob(descriptor, members, location_records)

@spec plan_blob(ExStorageService.Metadata.Models.Blob.t() | map(), [map()], [map()]) ::
  {:ok, plan()} | {:error, term()}

run_page(context, shard, cursor \\ nil, limit \\ 100, opts \\ [])

@spec run_page(
  ExStorageService.Context.t(),
  binary(),
  binary() | nil,
  pos_integer(),
  keyword()
) ::
  {:ok,
   %{
     planned: non_neg_integer(),
     blobs: non_neg_integer(),
     actual_replicas: non_neg_integer(),
     under_replicated: non_neg_integer(),
     unavailable: non_neg_integer(),
     next_cursor: binary() | nil
   }}
  | {:error, term()}

Plans and enqueues one bounded descriptor page for an owned shard.

scan_now(server)

@spec scan_now(GenServer.server()) :: :ok

shards()

@spec shards() :: [binary()]

start_link(opts)

@spec start_link(keyword()) :: GenServer.on_start()

status(server)

@spec status(GenServer.server()) :: {:ok, map()} | {:error, term()}

topology_fingerprint(members)

@spec topology_fingerprint([map()]) :: binary()