pub struct Wal {
dir: PathBuf,
config: WalConfig,
meta: WalMeta,
current_writer: Option<BufWriter<File>>,
current_segment_size: u64,
}Expand description
Write-Ahead Log.
Fields§
§dir: PathBuf§config: WalConfig§meta: WalMeta§current_writer: Option<BufWriter<File>>§current_segment_size: u64Implementations§
Source§impl Wal
impl Wal
Sourcepub fn open(dir: &Path, config: WalConfig) -> Result<Self, StorageError>
pub fn open(dir: &Path, config: WalConfig) -> Result<Self, StorageError>
Open or create a WAL in the given directory.
fn load_or_create_meta(dir: &Path) -> Result<WalMeta, StorageError>
fn segment_path(&self, segment_id: u64) -> PathBuf
fn open_current_segment(&mut self) -> Result<(), StorageError>
fn write_segment_header( writer: &mut BufWriter<File>, segment_id: u64, ) -> Result<(), StorageError>
fn rotate_segment(&mut self) -> Result<(), StorageError>
Sourcepub fn append(
&mut self,
entry_type: EntryType,
flags: u8,
payload: &[u8],
) -> Result<u64, StorageError>
pub fn append( &mut self, entry_type: EntryType, flags: u8, payload: &[u8], ) -> Result<u64, StorageError>
Append an entry to the WAL. Returns the assigned sequence number.
Sourcepub fn commit(&mut self, sequence: u64) -> Result<(), StorageError>
pub fn commit(&mut self, sequence: u64) -> Result<(), StorageError>
Mark all entries up to sequence as committed.
Ensures durability by syncing segment data to disk before updating metadata, then syncing the directory to make the rename durable. See RFC-002-01 (Pillai et al., OSDI 2014).
Sourcepub fn committed_sequence(&self) -> u64
pub fn committed_sequence(&self) -> u64
Get the last committed sequence number.
Sourcepub fn last_sequence(&self) -> u64
pub fn last_sequence(&self) -> u64
Get the last appended sequence number.
Sourcepub fn flush(&mut self) -> Result<(), StorageError>
pub fn flush(&mut self) -> Result<(), StorageError>
Flush buffered writes to disk.
fn persist_meta(&self) -> Result<(), StorageError>
Sourcepub fn recover(&mut self) -> Result<Vec<WalEntry>, StorageError>
pub fn recover(&mut self) -> Result<Vec<WalEntry>, StorageError>
Recover uncommitted entries after a crash.
Scans all segments for entries with sequence > committed_sequence. Validates CRC32 for each entry. Stops at first corrupted entry. Returns valid uncommitted entries for replay.
fn list_segments(&self) -> Result<Vec<u64>, StorageError>
fn read_segment( &self, segment_id: u64, committed_seq: u64, ) -> Result<Vec<WalEntry>, StorageError>
Sourcepub fn truncate_uncommitted(&mut self) -> Result<(), StorageError>
pub fn truncate_uncommitted(&mut self) -> Result<(), StorageError>
Truncate the WAL at the current committed position.
Removes all segments before the committed segment and truncates the committed segment at the committed offset. Used after recovery.