armdb 0.8.0

sharded bitcask key-value storage optimized for NVMe
Documentation
//! Sync instrumentation for `ctx_gates` integration tests.

use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};

static COUNTING: AtomicBool = AtomicBool::new(false);
static SHOULD_SYNC_READS: AtomicUsize = AtomicUsize::new(0);
static SYNC_CALLS: AtomicUsize = AtomicUsize::new(0);

/// Enable observed `should_sync` / `sync` counting (test-only usage).
pub fn set_counting(enabled: bool) {
    COUNTING.store(enabled, Ordering::Relaxed);
}

/// Reset observed counters.
pub fn reset() {
    SHOULD_SYNC_READS.store(0, Ordering::Relaxed);
    SYNC_CALLS.store(0, Ordering::Relaxed);
}

/// Observed `should_sync()` reads since last [`reset`] while counting is enabled.
pub fn should_sync_reads() -> usize {
    SHOULD_SYNC_READS.load(Ordering::Relaxed)
}

/// Observed `sync()` calls since last [`reset`] while counting is enabled.
pub fn sync_calls() -> usize {
    SYNC_CALLS.load(Ordering::Relaxed)
}

pub(crate) fn record_should_sync_read() {
    if COUNTING.load(Ordering::Relaxed) {
        SHOULD_SYNC_READS.fetch_add(1, Ordering::Relaxed);
    }
}

pub(crate) fn record_sync_call() {
    if COUNTING.load(Ordering::Relaxed) {
        SYNC_CALLS.fetch_add(1, Ordering::Relaxed);
    }
}