use crate::layout::BlobGuid;
#[derive(Debug, Clone, Copy)]
pub struct BlobStats {
pub guid: BlobGuid,
pub space_used: u32,
pub gap_space: u32,
pub num_slots: u16,
pub num_ext_blobs: u16,
pub compact_times: u32,
pub tombstone_leaf_cnt: u32,
}
#[derive(Debug, Clone)]
pub struct TreeStats {
pub blob_count: u32,
pub total_space_used: u64,
pub total_gap_space: u64,
pub total_slots: u64,
pub total_compactions: u64,
pub total_tombstones: u64,
pub blobs: Vec<BlobStats>,
pub bm_dirty_count: usize,
pub bm_pending_delete_count: usize,
pub bm_cache_hits: u64,
pub bm_cache_misses: u64,
pub bm_optimistic_restarts: u64,
pub bm_walker_ops: u64,
pub bm_walker_blob_hops: u64,
pub bm_max_blob_hops: u64,
pub bm_max_cross_blob_depth: u64,
pub bm_spillovers: u64,
pub bm_merges: u64,
pub journal: Option<JournalStats>,
pub checkpointer: Option<CheckpointerStats>,
}
impl TreeStats {
#[must_use]
#[allow(clippy::cast_precision_loss)] pub fn bm_avg_blob_hops(&self) -> f64 {
if self.bm_walker_ops == 0 {
0.0
} else {
self.bm_walker_blob_hops as f64 / self.bm_walker_ops as f64
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct JournalStats {
pub appends: u64,
pub batches: u64,
pub syncs: u64,
}
#[derive(Debug, Clone, Copy)]
pub struct CheckpointerStats {
pub rounds_attempted: u64,
pub rounds_succeeded: u64,
pub blobs_flushed: u64,
pub merges_total: u64,
pub truncates: u64,
pub evictions: u64,
}