pub struct CheckpointStateMachine<Clock: LogicalClock, A: ConcurrentAllocator = TursoAllocator> { /* private fields */ }Expand description
A state machine that performs a complete checkpoint operation on the MVCC store.
The checkpoint process:
- Takes a blocking lock on the database so that no other transactions can run during the checkpoint.
- Determines which row versions should be written to the B-tree.
- Begins a pager transaction
- Writes all the selected row versions to the B-tree.
- Commits the pager transaction, effectively flushing to the WAL
- Immediately does a TRUNCATE checkpoint from the WAL to the DB
- Fsync the DB file
- Truncate logical log to 0 (salt regenerated in memory), fsync, then truncate WAL
- Releases the blocking_checkpoint_lock
Passive mode defers step 1 until publish and runs collection/write concurrently; the durable outcome (WAL backfill, log truncate, metadata) is the same.
Implementations§
Source§impl<Clock: LogicalClock, A: ConcurrentAllocator> CheckpointStateMachine<Clock, A>
impl<Clock: LogicalClock, A: ConcurrentAllocator> CheckpointStateMachine<Clock, A>
pub fn new( pager: Arc<Pager>, mvstore: Arc<MvStore<Clock, A>>, connection: Arc<Connection>, update_transaction_state: bool, sync_mode: SyncMode, database_id: usize, mode: CheckpointMode, ) -> Self
Sourcepub fn cleanup_after_external_io_error(&mut self, err: LimboError) -> Result<()>
pub fn cleanup_after_external_io_error(&mut self, err: LimboError) -> Result<()>
Cleanup path for I/O errors that happen while waiting on completions outside
of step(). This mirrors step() error handling and also resets pager/WAL
checkpoint bookkeeping.
Trait Implementations§
Source§impl<Clock: LogicalClock, A: ConcurrentAllocator> StateTransition for CheckpointStateMachine<Clock, A>
impl<Clock: LogicalClock, A: ConcurrentAllocator> StateTransition for CheckpointStateMachine<Clock, A>
type Context = ()
type SMResult = CheckpointResult
Source§fn step(
&mut self,
_context: &Self::Context,
) -> Result<TransitionResult<Self::SMResult>>
fn step( &mut self, _context: &Self::Context, ) -> Result<TransitionResult<Self::SMResult>>
Transition the state machine to the next state. Read more
Source§fn finalize(&mut self, _context: &Self::Context) -> Result<()>
fn finalize(&mut self, _context: &Self::Context) -> Result<()>
Finalize the state machine. Read more
Source§fn is_finalized(&self) -> bool
fn is_finalized(&self) -> bool
Check if the state machine is finalized.
Auto Trait Implementations§
impl<Clock, A = TursoAllocator> !Freeze for CheckpointStateMachine<Clock, A>
impl<Clock, A = TursoAllocator> !RefUnwindSafe for CheckpointStateMachine<Clock, A>
impl<Clock, A = TursoAllocator> !UnwindSafe for CheckpointStateMachine<Clock, A>
impl<Clock, A> Send for CheckpointStateMachine<Clock, A>where
Arc<MvStore<Clock, A>>: Send,
Option<SeqCompactDriver<Clock, A>>: Send,
Option<StateMachine<BuildLocalSchemaViewStateMachine<Clock, A>>>: Send,
impl<Clock, A> Sync for CheckpointStateMachine<Clock, A>where
Arc<MvStore<Clock, A>>: Sync,
Option<SeqCompactDriver<Clock, A>>: Sync,
Option<StateMachine<BuildLocalSchemaViewStateMachine<Clock, A>>>: Sync,
impl<Clock, A> Unpin for CheckpointStateMachine<Clock, A>where
Arc<MvStore<Clock, A>>: Unpin,
Option<SeqCompactDriver<Clock, A>>: Unpin,
Option<StateMachine<BuildLocalSchemaViewStateMachine<Clock, A>>>: Unpin,
impl<Clock, A> UnsafeUnpin for CheckpointStateMachine<Clock, A>where
Arc<MvStore<Clock, A>>: UnsafeUnpin,
Option<SeqCompactDriver<Clock, A>>: UnsafeUnpin,
Option<StateMachine<BuildLocalSchemaViewStateMachine<Clock, A>>>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more