Bedrock.DataPlane.Log.Shale.Recovery (bedrock v0.5.3)
View SourceRecovery logic for Shale log servers.
Supports multi-source recovery for the consistent hashing model. When multiple source logs are provided, transactions are pulled from available sources to establish the version range. Since all logs receive the same version sequence (with personalized content), pulling from any survivor establishes the correct version boundaries.
For future optimization, true multi-source coalescing could merge transaction streams and filter by shard index, but for now we use the simpler approach of pulling from available sources.
Summary
Functions
@spec abort_all_waiting_pullers(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec close_writer(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec close_writer(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec discard_all_segments(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec discard_all_segments(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec discard_segments(term(), [Bedrock.DataPlane.Log.Shale.Segment.t()]) :: []
@spec discard_segments(term(), [Bedrock.DataPlane.Log.Shale.Segment.t()]) :: []
@spec ensure_active_segment(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec ensure_active_segment(Bedrock.DataPlane.Log.Shale.State.t(), Bedrock.version()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec open_writer(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec pull_transactions( t :: Bedrock.DataPlane.Log.Shale.State.t(), log_ref :: Bedrock.DataPlane.Log.ref(), first_version :: Bedrock.version(), last_version :: Bedrock.version() ) :: {:ok, Bedrock.DataPlane.Log.Shale.State.t()} | Bedrock.DataPlane.Log.pull_errors() | {:error, {:source_log_unavailable, log_ref :: Bedrock.DataPlane.Log.ref()}}
@spec pull_transactions_from_sources( t :: Bedrock.DataPlane.Log.Shale.State.t(), source_logs :: [Bedrock.DataPlane.Log.ref()], first_version :: Bedrock.version(), last_version :: Bedrock.version() ) :: {:ok, Bedrock.DataPlane.Log.Shale.State.t()} | Bedrock.DataPlane.Log.pull_errors() | {:error, {:source_log_unavailable, log_ref :: Bedrock.DataPlane.Log.ref()}} | {:error, :no_source_logs_available}
@spec push_sentinel(Bedrock.DataPlane.Log.Shale.State.t(), Bedrock.version()) :: Bedrock.DataPlane.Log.Shale.State.t()
@spec recover_from( Bedrock.DataPlane.Log.Shale.State.t(), source_logs :: [Bedrock.DataPlane.Log.ref()], first_version :: Bedrock.version(), last_version :: Bedrock.version() ) :: {:ok, Bedrock.DataPlane.Log.Shale.State.t()} | {:error, :lock_required} | {:error, {:source_log_unavailable, log_ref :: Bedrock.DataPlane.Log.ref()}} | {:error, :no_source_logs_available}