reth_db/utils.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
//! Utils crate for `db`.
use std::path::Path;
/// Returns the default page size that can be used in this OS.
pub(crate) fn default_page_size() -> usize {
let os_page_size = page_size::get();
// source: https://gitflic.ru/project/erthink/libmdbx/blob?file=mdbx.h#line-num-821
let libmdbx_max_page_size = 0x10000;
// May lead to errors if it's reduced further because of the potential size of the
// data.
let min_page_size = 4096;
os_page_size.clamp(min_page_size, libmdbx_max_page_size)
}
/// Check if a db is empty. It does not provide any information on the
/// validity of the data in it. We consider a database as non empty when it's a non empty directory.
pub fn is_database_empty<P: AsRef<Path>>(path: P) -> bool {
let path = path.as_ref();
if !path.exists() {
true
} else if path.is_file() {
false
} else if let Ok(dir) = path.read_dir() {
dir.count() == 0
} else {
true
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn is_database_empty_false_if_db_path_is_a_file() {
let db_file = tempfile::NamedTempFile::new().unwrap();
let result = is_database_empty(&db_file);
assert!(!result);
}
}