block-db 0.2.0

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

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

impl DataFile {
    pub async fn free(&mut self, id: &str) -> Result<usize, Error> {
        self.wal_checkpoint_handler().await?;
        self.wal.log(&DataFileLog::Free(id.to_string())).await?;

        if let Some(mut data_block) = self.data_blocks.remove(id) {
            let size = data_block.size(&self.options_store);

            self.used_bytes -= size;
            self.free_bytes += size;
            self.free_chunk_offsets
                .append(&mut data_block.chunk_offsets);

            return Ok(size);
        }

        Ok(0)
    }
}