block-db 0.2.0

Local, multi-threaded, durable byte DB.
Documentation
// Authors: Robert Lopez

use super::{wal::DataFileState, DataFile};
use crate::error::Error;

impl DataFile {
    /// Replays WAL from Checkpoint, truncating to the last
    /// known length -- to recover to a valid state
    pub async fn recover(&mut self) -> Result<(), Error> {
        let DataFileState {
            used_bytes,
            free_bytes,
            data_blocks,
            free_chunk_offsets,
        } = self.wal.replay(Some(self.options_store.clone())).await?;

        self.size = used_bytes + free_bytes;
        self.used_bytes = used_bytes;
        self.free_bytes = free_bytes;
        self.data_blocks = data_blocks;
        self.free_chunk_offsets = free_chunk_offsets;

        self.truncate(self.size).await
    }
}