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