// 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
}
}