block-db 0.2.0

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

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(())
    }
}