Skip to main content

nxs/
column_prefetch.rs

1//! Columnar layout column warmup (Adaptive-prefetch-spec ยง7.4).
2
3use std::collections::HashSet;
4use std::sync::atomic::{AtomicU64, Ordering};
5use std::sync::Mutex;
6
7/// Per-reader column warmup (separate from row page cache).
8#[derive(Default)]
9pub struct ColumnWarmState {
10    warmed: Mutex<HashSet<usize>>,
11    fetches: AtomicU64,
12}
13
14impl ColumnWarmState {
15    /// Mark `slot` warmed; returns `true` when a new fetch was issued.
16    pub fn prefetch(&self, slot: usize) -> bool {
17        let mut warmed = self.warmed.lock().expect("column warm lock");
18        if warmed.insert(slot) {
19            self.fetches.fetch_add(1, Ordering::Relaxed);
20            true
21        } else {
22            false
23        }
24    }
25
26    pub fn fetches(&self) -> u64 {
27        self.fetches.load(Ordering::Relaxed)
28    }
29}