use reth_db::{test_utils::create_test_rw_db_with_path, DatabaseEnv}; use reth_db_api::{ database::Database, table::{Compress, Encode, Table, TableRow}, transaction::DbTxMut, }; use reth_fs_util as fs; use reth_primitives::Bytes; use std::{path::Path, sync::Arc}; /// Path where the DB is initialized for benchmarks. #[allow(dead_code)] const BENCH_DB_PATH: &str = "/tmp/reth-benches"; /// Used for `RandomRead` and `RandomWrite` benchmarks. #[allow(dead_code)] const RANDOM_INDEXES: [usize; 10] = [23, 2, 42, 5, 3, 99, 54, 0, 33, 64]; /// Returns bench vectors in the format: `Vec<(Key, EncodedKey, Value, CompressedValue)>`. #[allow(dead_code)] pub(crate) fn load_vectors() -> Vec<(T::Key, Bytes, T::Value, Bytes)> where T::Key: Default + Clone + for<'de> serde::Deserialize<'de>, T::Value: Default + Clone + for<'de> serde::Deserialize<'de>, { let list: Vec> = serde_json::from_reader(std::io::BufReader::new( std::fs::File::open(format!( "{}/../../../testdata/micro/db/{}.json", env!("CARGO_MANIFEST_DIR"), T::NAME )) .expect("Test vectors not found. They can be generated from the workspace by calling `cargo run --bin reth -- test-vectors tables`."), )) .unwrap(); list.into_iter() .map(|(k, v)| { ( k.clone(), Bytes::copy_from_slice(k.encode().as_ref()), v.clone(), Bytes::copy_from_slice(v.compress().as_ref()), ) }) .collect::>() } /// Sets up a clear database at `bench_db_path`. #[allow(clippy::ptr_arg)] #[allow(dead_code)] pub(crate) fn set_up_db( bench_db_path: &Path, pair: &Vec<(::Key, Bytes, ::Value, Bytes)>, ) -> DatabaseEnv where T: Table, T::Key: Default + Clone, T::Value: Default + Clone, { // Reset DB let _ = fs::remove_dir_all(bench_db_path); let db = Arc::try_unwrap(create_test_rw_db_with_path(bench_db_path)).unwrap(); { // Prepare data to be read let tx = db.tx_mut().expect("tx"); for (k, _, v, _) in pair.clone() { tx.put::(k, v).expect("submit"); } tx.inner.commit().unwrap(); } db.into_inner_db() }