Bedrock.ControlPlane.Config.RecoveryAttempt (bedrock v0.5.2)

View Source

Represents an ongoing recovery attempt with its current state and progress.

Summary

Functions

Creates a new recovery attempt with the required parameters.

Returns the shard ID for system/metadata keys (tag 0).

Types

copy_error()

@type copy_error() ::
  :source_unavailable | :destination_full | {:transfer_failed, atom()}

log_recovery_info_by_id()

@type log_recovery_info_by_id() :: %{
  required(Bedrock.DataPlane.Log.id()) => Bedrock.DataPlane.Log.recovery_info()
}

log_replication_factor()

@type log_replication_factor() :: pos_integer()

materializer_recovery_info_by_id()

@type materializer_recovery_info_by_id() :: %{
  required(Bedrock.DataPlane.Materializer.id()) =>
    Bedrock.DataPlane.Materializer.recovery_info()
}

playback_error()

@type playback_error() :: :log_corrupted | :version_mismatch | {:read_failed, atom()}

reason_for_stall()

@type reason_for_stall() ::
  :newer_epoch_exists
  | :waiting_for_services
  | :unable_to_meet_log_quorum
  | :no_unassigned_logs
  | {:source_log_unavailable, log_to_pull :: Bedrock.DataPlane.Log.ref()}
  | {:failed_to_start, :resolver | :commit_proxy | :sequencer, node(),
     reason :: :timeout | :already_started | {:error, start_error()}}
  | {:failed_to_playback_logs,
     %{required(log_pid :: pid()) => reason :: playback_error()}}
  | {:failed_to_copy_some_logs,
     [
       {reason :: copy_error(), new_log_id :: Bedrock.DataPlane.Log.id(),
        old_log_id :: Bedrock.DataPlane.Log.id()}
     ]}
  | {:need_log_workers, pos_integer()}
  | {:materializer_unavailable, term()}
  | {:recovery_system_failed, term()}

shard_layout()

@type shard_layout() :: %{
  required(Bedrock.key()) => {Bedrock.range_tag(), Bedrock.key()}
}

start_error()

@type start_error() :: :process_not_found | :network_timeout | {:exit, any()}

t()

@type t() :: %Bedrock.ControlPlane.Config.RecoveryAttempt{
  attempt: non_neg_integer(),
  cluster: module(),
  durable_version: Bedrock.version(),
  epoch: non_neg_integer(),
  locked_service_ids: MapSet.t(Bedrock.Service.Worker.id()),
  log_recovery_info_by_id: log_recovery_info_by_id(),
  logs: %{
    required(Bedrock.DataPlane.Log.id()) =>
      Bedrock.ControlPlane.Config.LogDescriptor.t()
  },
  materializer_recovery_info_by_id: materializer_recovery_info_by_id(),
  metadata_materializer: pid() | nil,
  old_log_ids_to_copy: [Bedrock.DataPlane.Log.id()],
  proxies: [pid()],
  required_services: %{
    required(Bedrock.Service.Worker.id()) =>
      Bedrock.ControlPlane.Config.ServiceDescriptor.t()
  },
  resolvers: [{Bedrock.key(), pid()}],
  sequencer: pid() | nil,
  service_pids: %{required(Bedrock.Service.Worker.id()) => pid()},
  shard_layout: shard_layout() | nil,
  started_at: DateTime.t(),
  transaction_services: %{
    required(Bedrock.Service.Worker.id()) =>
      Bedrock.ControlPlane.Config.ServiceDescriptor.t()
  },
  transaction_system_layout:
    Bedrock.ControlPlane.Config.TransactionSystemLayout.t() | nil,
  version_vector: Bedrock.version_vector() | {0, 0}
}

Functions

new(cluster, epoch, started_at)

@spec new(cluster :: module(), epoch :: non_neg_integer(), started_at :: DateTime.t()) ::
  t()

Creates a new recovery attempt with the required parameters.

system_shard_id()

@spec system_shard_id() :: non_neg_integer()

Returns the shard ID for system/metadata keys (tag 0).

The system shard contains all keys starting with 0xFF, including the shard layout stored at \xff/system/shard_keys/*.