Bedrock.ControlPlane.Config.RecoveryAttempt (bedrock v0.5.3)
View SourceRepresents 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
@type copy_error() :: :source_unavailable | :destination_full | {:transfer_failed, atom()}
@type log_recovery_info_by_id() :: %{ required(Bedrock.DataPlane.Log.id()) => Bedrock.DataPlane.Log.recovery_info() }
@type log_replication_factor() :: pos_integer()
@type materializer_recovery_info_by_id() :: %{ required(Bedrock.DataPlane.Materializer.id()) => Bedrock.DataPlane.Materializer.recovery_info() }
@type playback_error() :: :log_corrupted | :version_mismatch | {:read_failed, atom()}
@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()}
@type shard_layout() :: %{ required(Bedrock.key()) => {Bedrock.range_tag(), Bedrock.key()} }
@type start_error() :: :process_not_found | :network_timeout | {:exit, any()}
@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
@spec new(cluster :: module(), epoch :: non_neg_integer(), started_at :: DateTime.t()) :: t()
Creates a new recovery attempt with the required parameters.
@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/*.