mod id_tracker;
mod id_tracker_read;
mod lifecycle;
pub mod mappings;
pub mod on_disk_format;
pub mod read_only;
mod reader;
#[cfg(test)]
mod tests;
use std::path::PathBuf;
use crate::common::bitvec::BitVec;
use crate::common::universal_io::{SliceBufferedUpdateWrapper, UniversalWrite};
pub use self::mappings::DiskMappingsSource;
use self::on_disk_format::{e2i_path, i2e_path, is_uuid_path};
pub use self::read_only::ReadOnlyDiskIdTracker;
use self::reader::DiskMappingReader;
use crate::segment::common::buffered_update_bitslice::BufferedUpdateBitSlice;
use crate::segment::id_tracker::compressed::versions_store::CompressedVersions;
use crate::segment::types::SeqNumberType;
#[derive(Debug)]
pub struct DiskIdTracker<S: UniversalWrite> {
path: PathBuf,
reader: DiskMappingReader<S>,
deleted: BitVec,
deleted_wrapper: BufferedUpdateBitSlice<S>,
internal_to_version: CompressedVersions,
internal_to_version_wrapper: SliceBufferedUpdateWrapper<S, SeqNumberType>,
}
impl<S: UniversalWrite> DiskIdTracker<S> {
pub fn ram_usage_bytes(&self) -> usize {
let Self {
path: _,
reader,
deleted,
deleted_wrapper: _, internal_to_version,
internal_to_version_wrapper: _, } = self;
internal_to_version.ram_usage_bytes()
+ deleted.capacity().div_ceil(u8::BITS as usize)
+ reader.ram_usage_bytes()
}
fn mapping_files(&self) -> Vec<PathBuf> {
vec![
i2e_path(&self.path),
e2i_path(&self.path),
is_uuid_path(&self.path),
]
}
}