mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-01-27 16:18:08 -05:00
48 lines
1.2 KiB
Rust
48 lines
1.2 KiB
Rust
//! 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);
|
|
}
|
|
}
|