use super::{wal::DataFileLog, DataFile};
use crate::{error::Error, uncorrupt::UncorruptAction};
use std::collections::{HashMap, VecDeque};
impl DataFile {
pub async fn clear(&mut self) -> Result<(), Error> {
self.wal_checkpoint_handler().await?;
self.wal.log(&DataFileLog::Clear).await?;
if let Err(err) = self.truncate(0).await {
self.wal.undo().await.map_err(|err| Error::Corrupted {
err: Box::new(Error::Walr(err)),
action: UncorruptAction::Clear {
data_file_id: self.id.clone(),
},
})?;
return Err(err);
}
self.size = 0;
self.free_bytes = 0;
self.used_bytes = 0;
self.data_blocks = HashMap::new();
self.free_chunk_offsets = VecDeque::new();
Ok(())
}
}