database: remove Tables references

This commit is contained in:
hinto.janai 2024-06-12 19:31:49 -04:00
parent a156abf36a
commit fd09dfad87
No known key found for this signature in database
GPG key ID: D47CE05FA175A499
4 changed files with 650 additions and 666 deletions

View file

@ -21,7 +21,6 @@ use crate::{
error::{InitError, RuntimeError}, error::{InitError, RuntimeError},
resize::ResizeAlgorithm, resize::ResizeAlgorithm,
table::Table, table::Table,
tables::call_fn_on_all_tables_or_early_return,
}; };
//---------------------------------------------------------------------------------------------------- Consts //---------------------------------------------------------------------------------------------------- Consts
@ -211,22 +210,6 @@ impl Env for ConcreteEnv {
Ok(()) Ok(())
} }
let mut tx_rw = env.write_txn()?;
// Create all tables.
// FIXME: this macro is kinda awkward.
{
let env = &env;
let tx_rw = &mut tx_rw;
match call_fn_on_all_tables_or_early_return!(create_table(env, tx_rw)) {
Ok(_) => (),
Err(e) => return Err(e),
}
}
// INVARIANT: this should never return `ResizeNeeded` due to adding
// some tables since we added some leeway to the memory map above.
tx_rw.commit()?;
Ok(Self { Ok(Self {
env: RwLock::new(env), env: RwLock::new(env),
config, config,

File diff suppressed because it is too large Load diff

View file

@ -9,7 +9,6 @@ use crate::{
error::{InitError, RuntimeError}, error::{InitError, RuntimeError},
resize::ResizeAlgorithm, resize::ResizeAlgorithm,
table::Table, table::Table,
tables::{call_fn_on_all_tables_or_early_return, TablesIter, TablesMut},
transaction::{TxRo, TxRw}, transaction::{TxRo, TxRw},
}; };
@ -249,29 +248,31 @@ where
#[doc = doc_table_error!()] #[doc = doc_table_error!()]
fn open_db_rw<T: Table>(&self, tx_rw: &Rw) -> Result<impl DatabaseRw<T>, RuntimeError>; fn open_db_rw<T: Table>(&self, tx_rw: &Rw) -> Result<impl DatabaseRw<T>, RuntimeError>;
/// Open all tables in read/iter mode. // TODO: make equivalent in `cuprate-blockchain`.
///
/// This calls [`EnvInner::open_db_ro`] on all database tables
/// and returns a structure that allows access to all tables.
///
#[doc = doc_table_error!()]
fn open_tables(&self, tx_ro: &Ro) -> Result<impl TablesIter, RuntimeError> {
call_fn_on_all_tables_or_early_return! {
Self::open_db_ro(self, tx_ro)
}
}
/// Open all tables in read-write mode. // /// Open all tables in read/iter mode.
/// // ///
/// This calls [`EnvInner::open_db_rw`] on all database tables // /// This calls [`EnvInner::open_db_ro`] on all database tables
/// and returns a structure that allows access to all tables. // /// and returns a structure that allows access to all tables.
/// // ///
#[doc = doc_table_error!()] // #[doc = doc_table_error!()]
fn open_tables_mut(&self, tx_rw: &Rw) -> Result<impl TablesMut, RuntimeError> { // fn open_tables(&self, tx_ro: &Ro) -> Result<impl TablesIter, RuntimeError> {
call_fn_on_all_tables_or_early_return! { // call_fn_on_all_tables_or_early_return! {
Self::open_db_rw(self, tx_rw) // Self::open_db_ro(self, tx_ro)
} // }
} // }
// /// Open all tables in read-write mode.
// ///
// /// This calls [`EnvInner::open_db_rw`] on all database tables
// /// and returns a structure that allows access to all tables.
// ///
// #[doc = doc_table_error!()]
// fn open_tables_mut(&self, tx_rw: &Rw) -> Result<impl TablesMut, RuntimeError> {
// call_fn_on_all_tables_or_early_return! {
// Self::open_db_rw(self, tx_rw)
// }
// }
/// Clear all `(key, value)`'s from a database table. /// Clear all `(key, value)`'s from a database table.
/// ///

View file

@ -1,85 +1,85 @@
//! Utilities for `cuprate_blockchain` testing. // //! Utilities for `cuprate_blockchain` testing.
//! // //!
//! These types/fn's are only: // //! These types/fn's are only:
//! - enabled on #[cfg(test)] // //! - enabled on #[cfg(test)]
//! - only used internally // //! - only used internally
//---------------------------------------------------------------------------------------------------- Import // //---------------------------------------------------------------------------------------------------- Import
use std::fmt::Debug; // use std::fmt::Debug;
use pretty_assertions::assert_eq; // use pretty_assertions::assert_eq;
use crate::{config::ConfigBuilder, tables::Tables, ConcreteEnv, DatabaseRo, Env, EnvInner}; // use crate::{config::ConfigBuilder, tables::Tables, ConcreteEnv, DatabaseRo, Env, EnvInner};
//---------------------------------------------------------------------------------------------------- Struct // //---------------------------------------------------------------------------------------------------- Struct
/// Named struct to assert the length of all tables. // /// Named struct to assert the length of all tables.
/// // ///
/// This is a struct with fields instead of a function // /// This is a struct with fields instead of a function
/// so that callers can name arguments, otherwise the call-site // /// so that callers can name arguments, otherwise the call-site
/// is a little confusing, i.e. `assert_table_len(0, 25, 1, 123)`. // /// is a little confusing, i.e. `assert_table_len(0, 25, 1, 123)`.
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] // #[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) struct AssertTableLen { // pub(crate) struct AssertTableLen {
pub(crate) block_infos: u64, // pub(crate) block_infos: u64,
pub(crate) block_blobs: u64, // pub(crate) block_blobs: u64,
pub(crate) block_heights: u64, // pub(crate) block_heights: u64,
pub(crate) key_images: u64, // pub(crate) key_images: u64,
pub(crate) num_outputs: u64, // pub(crate) num_outputs: u64,
pub(crate) pruned_tx_blobs: u64, // pub(crate) pruned_tx_blobs: u64,
pub(crate) prunable_hashes: u64, // pub(crate) prunable_hashes: u64,
pub(crate) outputs: u64, // pub(crate) outputs: u64,
pub(crate) prunable_tx_blobs: u64, // pub(crate) prunable_tx_blobs: u64,
pub(crate) rct_outputs: u64, // pub(crate) rct_outputs: u64,
pub(crate) tx_blobs: u64, // pub(crate) tx_blobs: u64,
pub(crate) tx_ids: u64, // pub(crate) tx_ids: u64,
pub(crate) tx_heights: u64, // pub(crate) tx_heights: u64,
pub(crate) tx_unlock_time: u64, // pub(crate) tx_unlock_time: u64,
} // }
impl AssertTableLen { // impl AssertTableLen {
/// Assert the length of all tables. // /// Assert the length of all tables.
pub(crate) fn assert(self, tables: &impl Tables) { // pub(crate) fn assert(self, tables: &impl Tables) {
let other = Self { // let other = Self {
block_infos: tables.block_infos().len().unwrap(), // block_infos: tables.block_infos().len().unwrap(),
block_blobs: tables.block_blobs().len().unwrap(), // block_blobs: tables.block_blobs().len().unwrap(),
block_heights: tables.block_heights().len().unwrap(), // block_heights: tables.block_heights().len().unwrap(),
key_images: tables.key_images().len().unwrap(), // key_images: tables.key_images().len().unwrap(),
num_outputs: tables.num_outputs().len().unwrap(), // num_outputs: tables.num_outputs().len().unwrap(),
pruned_tx_blobs: tables.pruned_tx_blobs().len().unwrap(), // pruned_tx_blobs: tables.pruned_tx_blobs().len().unwrap(),
prunable_hashes: tables.prunable_hashes().len().unwrap(), // prunable_hashes: tables.prunable_hashes().len().unwrap(),
outputs: tables.outputs().len().unwrap(), // outputs: tables.outputs().len().unwrap(),
prunable_tx_blobs: tables.prunable_tx_blobs().len().unwrap(), // prunable_tx_blobs: tables.prunable_tx_blobs().len().unwrap(),
rct_outputs: tables.rct_outputs().len().unwrap(), // rct_outputs: tables.rct_outputs().len().unwrap(),
tx_blobs: tables.tx_blobs().len().unwrap(), // tx_blobs: tables.tx_blobs().len().unwrap(),
tx_ids: tables.tx_ids().len().unwrap(), // tx_ids: tables.tx_ids().len().unwrap(),
tx_heights: tables.tx_heights().len().unwrap(), // tx_heights: tables.tx_heights().len().unwrap(),
tx_unlock_time: tables.tx_unlock_time().len().unwrap(), // tx_unlock_time: tables.tx_unlock_time().len().unwrap(),
}; // };
assert_eq!(self, other); // assert_eq!(self, other);
} // }
} // }
//---------------------------------------------------------------------------------------------------- fn // //---------------------------------------------------------------------------------------------------- fn
/// Create an `Env` in a temporarily directory. // /// Create an `Env` in a temporarily directory.
/// The directory is automatically removed after the `TempDir` is dropped. // /// The directory is automatically removed after the `TempDir` is dropped.
/// // ///
/// FIXME: changing this to `-> impl Env` causes lifetime errors... // /// FIXME: changing this to `-> impl Env` causes lifetime errors...
pub(crate) fn tmp_concrete_env() -> (ConcreteEnv, tempfile::TempDir) { // pub(crate) fn tmp_concrete_env() -> (ConcreteEnv, tempfile::TempDir) {
let tempdir = tempfile::tempdir().unwrap(); // let tempdir = tempfile::tempdir().unwrap();
let config = ConfigBuilder::new() // let config = ConfigBuilder::new()
.db_directory(tempdir.path().into()) // .db_directory(tempdir.path().into())
.low_power() // .low_power()
.build(); // .build();
let env = ConcreteEnv::open(config).unwrap(); // let env = ConcreteEnv::open(config).unwrap();
(env, tempdir) // (env, tempdir)
} // }
/// Assert all the tables in the environment are empty. // /// Assert all the tables in the environment are empty.
pub(crate) fn assert_all_tables_are_empty(env: &ConcreteEnv) { // pub(crate) fn assert_all_tables_are_empty(env: &ConcreteEnv) {
let env_inner = env.env_inner(); // let env_inner = env.env_inner();
let tx_ro = env_inner.tx_ro().unwrap(); // let tx_ro = env_inner.tx_ro().unwrap();
let tables = env_inner.open_tables(&tx_ro).unwrap(); // let tables = env_inner.open_tables(&tx_ro).unwrap();
assert!(tables.all_tables_empty().unwrap()); // assert!(tables.all_tables_empty().unwrap());
assert_eq!(crate::ops::tx::get_num_tx(tables.tx_ids()).unwrap(), 0); // assert_eq!(crate::ops::tx::get_num_tx(tables.tx_ids()).unwrap(), 0);
} // }