pub struct WriteAheadLog { /* private fields */ }Expand description
Write-Ahead Log for crash recovery.
All write operations are logged to disk before being applied to the database. This ensures that the database can be recovered to a consistent state after a crash.
§Thread Safety
WriteAheadLog is thread-safe and can be shared across multiple threads using Arc.
Implementations§
Source§impl WriteAheadLog
impl WriteAheadLog
Sourcepub fn append(&self, record: &WalRecord) -> DbxResult<u64>
pub fn append(&self, record: &WalRecord) -> DbxResult<u64>
Appends a record to the WAL.
Returns the sequence number assigned to this record.
The record is buffered in memory until sync() is called.
§Arguments
record- The WAL record to append
§Returns
The sequence number assigned to this record
§Example
let wal = WriteAheadLog::open(Path::new("./wal.log"))?;
let record = WalRecord::Insert {
table: "users".to_string(),
key: b"key1".to_vec(),
value: b"value1".to_vec(),
ts: 0,
};
let seq = wal.append(&record)?;Sourcepub fn sync(&self) -> DbxResult<()>
pub fn sync(&self) -> DbxResult<()>
Synchronizes the WAL to disk (fsync).
This ensures that all buffered writes are persisted to disk. Call this after critical operations to guarantee durability.
§Example
let wal = WriteAheadLog::open(Path::new("./wal.log"))?;
let record = WalRecord::Insert {
table: "users".to_string(),
key: b"key1".to_vec(),
value: b"value1".to_vec(),
ts: 0,
};
wal.append(&record)?;
wal.sync()?; // Ensure durabilitySourcepub fn replay(&self) -> DbxResult<Vec<WalRecord>>
pub fn replay(&self) -> DbxResult<Vec<WalRecord>>
Replays all records from the WAL.
Reads the entire WAL file and returns all records in order. Used during database recovery to restore the state after a crash.
§Returns
A vector of all WAL records in the order they were written
§Example
let tmp = tempfile::NamedTempFile::new().unwrap();
let wal = WriteAheadLog::open(tmp.path())?;
let records = wal.replay()?;
for record in records {
// Apply record to database
}Sourcepub fn current_sequence(&self) -> u64
pub fn current_sequence(&self) -> u64
Returns the current sequence number.
Auto Trait Implementations§
impl !Freeze for WriteAheadLog
impl RefUnwindSafe for WriteAheadLog
impl Send for WriteAheadLog
impl Sync for WriteAheadLog
impl Unpin for WriteAheadLog
impl UnsafeUnpin for WriteAheadLog
impl UnwindSafe for WriteAheadLog
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
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>
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>
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