Skip to main content

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 error::ConfigError;
33pub use nodes::leaf_node::LeafReadResult;
34pub use range_scan::{ScanIter, ScanReturnField};
35pub use tree::{BfTree, LeafInsertResult, ScanIterError};
36pub use wal::WalReader;
37
38#[macro_export]
39macro_rules! info {
40    ($($arg:tt)*) => {
41        #[cfg(all(feature = "tracing", debug_assertions))]
42        {
43            tracing::info!($($arg)*);
44        }
45
46        #[cfg(not(all(feature = "tracing", debug_assertions)))]
47        {
48        }
49    };
50}
51
52#[macro_export]
53macro_rules! counter {
54    ($event:ident) => {
55        #[cfg(feature = "metrics-rt")]
56        {
57            $crate::metric::get_tls_recorder()
58                .increment_counter($crate::metric::Counter::$event, 1);
59        }
60    };
61    ($event:ident, $value:literal) => {
62        #[cfg(feature = "metrics-rt")]
63        {
64            $crate::metric::get_tls_recorder()
65                .increment_counter($crate::metric::Counter::$event, $value);
66        }
67    };
68}
69
70#[macro_export]
71macro_rules! histogram {
72    ($event:ident, $value:expr) => {
73        #[cfg(feature = "metrics-rt")]
74        {
75            $crate::metric::get_tls_recorder()
76                .hit_histogram($crate::metric::Histogram::$event, $value);
77        }
78    };
79}
80
81#[macro_export]
82macro_rules! timer {
83    ($event:expr) => {
84        let _timer_guard = if cfg!(feature = "metrics-rt") {
85            Some($crate::metric::get_tls_recorder().timer_guard($event))
86        } else {
87            None
88        };
89    };
90}
91
92#[macro_export]
93macro_rules! check_parent {
94    ($self:ident, $node:expr, $parent:expr) => {
95        if let Some(ref p) = $parent {
96            p.check_version()?;
97        } else if $node != $self.get_root_page().0 {
98            return Err(TreeError::Locked);
99        }
100    };
101}