Bedrock.DataPlane.Log.Shale.Recovery (bedrock v0.6.0)
View SourceRecovery logic for Shale log servers.
Every log stores the same encoded transaction stream. Recovery pulls from one available survivor, appends each source binary unchanged, and lets the fresh destination Demux perform normal shard slicing.
Summary
Functions
Tears down the previous Demux incarnation (synchronously, so no stale buffer or in-flight flush can write a chunk afterward) and starts a fresh one. The durability floor resets to nil: it re-derives from fresh confirmations only, pinning trim at the recovery durable version until the replayed range re-confirms.
Functions
@spec abort_all_pending_pushes(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
@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 pull_transactions( t :: Bedrock.DataPlane.Log.Shale.State.t(), log_ref :: Bedrock.DataPlane.Log.ref(), replay_after :: Bedrock.version(), last_inclusive :: Bedrock.version() ) :: {:ok, Bedrock.DataPlane.Log.Shale.State.t()} | {:error, term(), Bedrock.DataPlane.Log.Shale.State.t()}
@spec pull_transactions_from_sources( t :: Bedrock.DataPlane.Log.Shale.State.t(), source_logs :: [Bedrock.DataPlane.Log.ref()], replay_after :: Bedrock.version(), last_inclusive :: Bedrock.version() ) :: {:ok, Bedrock.DataPlane.Log.Shale.State.t()} | {:error, term(), Bedrock.DataPlane.Log.Shale.State.t()}
@spec recover_from( Bedrock.DataPlane.Log.Shale.State.t(), source_logs :: [Bedrock.DataPlane.Log.ref()], replay_after :: Bedrock.version(), last_inclusive :: Bedrock.version() ) :: {:ok, Bedrock.DataPlane.Log.Shale.State.t()} | {:error, term(), Bedrock.DataPlane.Log.Shale.State.t()}
@spec reset_demux(Bedrock.DataPlane.Log.Shale.State.t()) :: Bedrock.DataPlane.Log.Shale.State.t()
Tears down the previous Demux incarnation (synchronously, so no stale buffer or in-flight flush can write a chunk afterward) and starts a fresh one. The durability floor resets to nil: it re-derives from fresh confirmations only, pinning trim at the recovery durable version until the replayed range re-confirms.
States without an object storage backend (segment-only unit tests) are left untouched.