bf_tree/
lib.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT license.
3
4#![doc = include_str!("../README.md")]
5pub mod circular_buffer;
6mod config;
7mod error;
8mod fs;
9mod nodes;
10mod wal;
11
12#[cfg(any(
13    feature = "metrics",
14    feature = "metrics-rt",
15    feature = "metrics-rt-debug-all",
16    feature = "metrics-rt-debug-timer"
17))]
18pub mod metric;
19
20mod mini_page_op;
21mod range_scan;
22mod storage;
23pub(crate) mod sync;
24#[cfg(test)]
25mod tests;
26
27mod snapshot;
28mod tree;
29mod utils;
30
31pub use config::{Config, StorageBackend, WalConfig};
32pub use nodes::leaf_node::LeafReadResult;
33pub use range_scan::ScanIter;
34pub use tree::{BfTree, LeafInsertResult};
35pub use wal::WalReader;
36
37#[macro_export]
38macro_rules! info {
39    ($($arg:tt)*) => {
40        #[cfg(all(feature = "tracing", debug_assertions))]
41        {
42            tracing::info!($($arg)*);
43        }
44
45        #[cfg(not(all(feature = "tracing", debug_assertions)))]
46        {
47        }
48    };
49}
50
51#[macro_export]
52macro_rules! counter {
53    ($event:ident) => {
54        #[cfg(feature = "metrics-rt")]
55        {
56            $crate::metric::get_tls_recorder()
57                .increment_counter($crate::metric::Counter::$event, 1);
58        }
59    };
60    ($event:ident, $value:literal) => {
61        #[cfg(feature = "metrics-rt")]
62        {
63            $crate::metric::get_tls_recorder()
64                .increment_counter($crate::metric::Counter::$event, $value);
65        }
66    };
67}
68
69#[macro_export]
70macro_rules! histogram {
71    ($event:ident, $value:expr) => {
72        #[cfg(feature = "metrics-rt")]
73        {
74            $crate::metric::get_tls_recorder()
75                .hit_histogram($crate::metric::Histogram::$event, $value);
76        }
77    };
78}
79
80#[macro_export]
81macro_rules! timer {
82    ($event:expr) => {
83        let _timer_guard = if cfg!(feature = "metrics-rt") {
84            Some($crate::metric::get_tls_recorder().timer_guard($event))
85        } else {
86            None
87        };
88    };
89}
90
91#[macro_export]
92macro_rules! check_parent {
93    ($self:ident, $node:expr, $parent:expr) => {
94        if let Some(ref p) = $parent {
95            p.check_version()?;
96        } else if $node != $self.get_root_page().0 {
97            return Err(TreeError::Locked);
98        }
99    };
100}