use std::sync::atomic::{AtomicU64, AtomicUsize, Ordering as AtomicOrdering};
#[derive(Debug, Default)]
pub(crate) struct FstMetrics {
pub(crate) num_rebuilds: AtomicUsize,
pub(crate) add_buffer_items_at_rebuild_sum: AtomicUsize,
pub(crate) del_buffer_items_at_rebuild_sum: AtomicUsize,
pub(crate) rebuild_duration_micros_sum: AtomicU64,
pub(crate) persisted_keys_at_rebuild_sum: AtomicUsize,
}
impl FstMetrics {
pub(crate) fn snapshot(&self) -> FstMetricsSnapshot {
FstMetricsSnapshot {
num_rebuilds: self.num_rebuilds.load(AtomicOrdering::Relaxed),
add_buffer_items_at_rebuild_sum: self.add_buffer_items_at_rebuild_sum.load(AtomicOrdering::Relaxed),
del_buffer_items_at_rebuild_sum: self.del_buffer_items_at_rebuild_sum.load(AtomicOrdering::Relaxed),
rebuild_duration_micros_sum: self.rebuild_duration_micros_sum.load(AtomicOrdering::Relaxed),
persisted_keys_at_rebuild_sum: self.persisted_keys_at_rebuild_sum.load(AtomicOrdering::Relaxed),
}
}
}
#[derive(Debug, Clone, Copy)]
#[non_exhaustive]
pub struct FstMetricsSnapshot {
pub num_rebuilds: usize,
pub add_buffer_items_at_rebuild_sum: usize,
pub del_buffer_items_at_rebuild_sum: usize,
pub rebuild_duration_micros_sum: u64,
pub persisted_keys_at_rebuild_sum: usize,
}