From e4deda757ad17765abf2fa32d2da57ecf08bf545 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 11 Apr 2022 10:01:40 +0100 Subject: [PATCH] Further removal of templates in db classes (#3785) * Splitting release_assert_success in to lmdb/rocksdb variants and removing function from store_partial. This is one of the leaky abstractions resulting from the former templated code. lmdb exposes return statuses with int while rocksdb uses an enum class. Removing the leaky abstraction will allow this code to be specialized to the backend type and flow more logically. * Moving the parallel_traversal algorithm in to its own file. * Moving version number constants off of store_partial and on to store. Changing each to constexpr values. * Moving root_exists on to ledger since it's not a direct operation on store. * Removing unused functions from store_partial. * Remove put_key function as using a nullptr value has equivalent semantics and this is how it's actually implemented. * Removing unused functions and moving several functions from nano::store_partial to nano::store. * Renaming mdb_store and rocksdb_store to lmdb::store and rocksdb::store, respectively. * Moving ::initialize from store_partial to store. * Removing store_partial. * Formatting. --- nano/core_test/block_store.cpp | 106 +++--- nano/core_test/confirmation_height.cpp | 10 +- nano/core_test/ledger.cpp | 190 +++++----- nano/core_test/node.cpp | 2 +- nano/core_test/processor_service.cpp | 4 +- nano/node/lmdb/account_store.cpp | 5 +- nano/node/lmdb/account_store.hpp | 6 +- nano/node/lmdb/block_store.cpp | 7 +- nano/node/lmdb/block_store.hpp | 6 +- nano/node/lmdb/confirmation_height_store.cpp | 7 +- nano/node/lmdb/confirmation_height_store.hpp | 6 +- nano/node/lmdb/final_vote_store.cpp | 7 +- nano/node/lmdb/final_vote_store.hpp | 6 +- nano/node/lmdb/frontier_store.cpp | 7 +- nano/node/lmdb/frontier_store.hpp | 6 +- nano/node/lmdb/lmdb.cpp | 106 +++--- nano/node/lmdb/lmdb.hpp | 327 +++++++++--------- nano/node/lmdb/online_weight_store.cpp | 8 +- nano/node/lmdb/online_weight_store.hpp | 5 +- nano/node/lmdb/peer_store.cpp | 10 +- nano/node/lmdb/peer_store.hpp | 6 +- nano/node/lmdb/pending_store.cpp | 7 +- nano/node/lmdb/pending_store.hpp | 6 +- nano/node/lmdb/pruned_store.cpp | 11 +- nano/node/lmdb/pruned_store.hpp | 6 +- nano/node/lmdb/unchecked_store.cpp | 9 +- nano/node/lmdb/unchecked_store.hpp | 6 +- nano/node/lmdb/version_store.cpp | 6 +- nano/node/lmdb/version_store.hpp | 6 +- nano/node/node.cpp | 6 +- nano/node/rocksdb/account_store.cpp | 7 +- nano/node/rocksdb/account_store.hpp | 6 +- nano/node/rocksdb/block_store.cpp | 7 +- nano/node/rocksdb/block_store.hpp | 6 +- .../rocksdb/confirmation_height_store.cpp | 7 +- .../rocksdb/confirmation_height_store.hpp | 6 +- nano/node/rocksdb/final_vote_store.cpp | 7 +- nano/node/rocksdb/final_vote_store.hpp | 6 +- nano/node/rocksdb/frontier_store.cpp | 7 +- nano/node/rocksdb/frontier_store.hpp | 6 +- nano/node/rocksdb/online_weight_store.cpp | 8 +- nano/node/rocksdb/online_weight_store.hpp | 6 +- nano/node/rocksdb/peer_store.cpp | 10 +- nano/node/rocksdb/peer_store.hpp | 6 +- nano/node/rocksdb/pending_store.cpp | 7 +- nano/node/rocksdb/pending_store.hpp | 6 +- nano/node/rocksdb/pruned_store.cpp | 11 +- nano/node/rocksdb/pruned_store.hpp | 6 +- nano/node/rocksdb/rocksdb.cpp | 92 +++-- nano/node/rocksdb/rocksdb.hpp | 263 +++++++------- nano/node/rocksdb/unchecked_store.cpp | 9 +- nano/node/rocksdb/unchecked_store.hpp | 6 +- nano/node/rocksdb/version_store.cpp | 6 +- nano/node/rocksdb/version_store.hpp | 6 +- nano/node/wallet.cpp | 4 +- nano/qt_test/qt.cpp | 4 +- nano/secure/CMakeLists.txt | 1 - nano/secure/ledger.cpp | 5 + nano/secure/ledger.hpp | 1 + nano/secure/parallel_traversal.hpp | 32 ++ nano/secure/store.cpp | 21 ++ nano/secure/store.hpp | 11 +- nano/secure/store_partial.hpp | 191 ---------- nano/slow_test/node.cpp | 4 +- 64 files changed, 784 insertions(+), 897 deletions(-) create mode 100644 nano/secure/parallel_traversal.hpp delete mode 100644 nano/secure/store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index fef9e3dc..ca9d6caa 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -26,11 +26,11 @@ using namespace std::chrono_literals; namespace { -void modify_account_info_to_v14 (nano::mdb_store & store, nano::transaction const & transaction_a, nano::account const & account_a, uint64_t confirmation_height, nano::block_hash const & rep_block); -void modify_confirmation_height_to_v15 (nano::mdb_store & store, nano::transaction const & transaction, nano::account const & account, uint64_t confirmation_height); -void write_sideband_v14 (nano::mdb_store & store_a, nano::transaction & transaction_a, nano::block const & block_a, MDB_dbi db_a); -void write_sideband_v15 (nano::mdb_store & store_a, nano::transaction & transaction_a, nano::block const & block_a); -void write_block_w_sideband_v18 (nano::mdb_store & store_a, MDB_dbi database, nano::write_transaction & transaction_a, nano::block const & block_a); +void modify_account_info_to_v14 (nano::lmdb::store & store, nano::transaction const & transaction_a, nano::account const & account_a, uint64_t confirmation_height, nano::block_hash const & rep_block); +void modify_confirmation_height_to_v15 (nano::lmdb::store & store, nano::transaction const & transaction, nano::account const & account, uint64_t confirmation_height); +void write_sideband_v14 (nano::lmdb::store & store_a, nano::transaction & transaction_a, nano::block const & block_a, MDB_dbi db_a); +void write_sideband_v15 (nano::lmdb::store & store_a, nano::transaction & transaction_a, nano::block const & block_a); +void write_block_w_sideband_v18 (nano::lmdb::store & store_a, MDB_dbi database, nano::write_transaction & transaction_a, nano::block const & block_a); } TEST (block_store, construction) @@ -328,7 +328,7 @@ TEST (block_store, genesis) ASSERT_TRUE (!store->init_error ()); nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger_cache); + store->initialize (transaction, ledger_cache, nano::dev::constants); nano::account_info info; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis->account (), info)); ASSERT_EQ (nano::dev::genesis->hash (), info.head); @@ -699,31 +699,31 @@ TEST (mdb_block_store, supported_version_upgrades) auto path (nano::unique_path ()); nano::logger_mt logger; { - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); // Lower the database to the max version unsupported for upgrades - store.version.put (transaction, store.minimum_version - 1); + store.version.put (transaction, store.version_minimum - 1); } // Upgrade should fail { - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); ASSERT_TRUE (store.init_error ()); } auto path1 (nano::unique_path ()); // Now try with the minimum version { - nano::mdb_store store (logger, path1, nano::dev::constants); + nano::lmdb::store store (logger, path1, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); // Lower the database version to the minimum version supported for upgrade. - store.version.put (transaction, store.minimum_version); + store.version.put (transaction, store.version_minimum); store.confirmation_height.del (transaction, nano::dev::genesis->account ()); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1_handle)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); @@ -733,7 +733,7 @@ TEST (mdb_block_store, supported_version_upgrades) // Upgrade should work { - nano::mdb_store store (logger, path1, nano::dev::constants); + nano::lmdb::store store (logger, path1, nano::dev::constants); ASSERT_FALSE (store.init_error ()); } } @@ -746,7 +746,7 @@ TEST (mdb_block_store, bad_path) return; } nano::logger_mt logger; - nano::mdb_store store (logger, boost::filesystem::path ("///"), nano::dev::constants); + nano::lmdb::store store (logger, boost::filesystem::path ("///"), nano::dev::constants); ASSERT_TRUE (store.init_error ()); } @@ -916,7 +916,7 @@ TEST (block_store, cemented_count_cache) ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_write ()); nano::ledger_cache ledger_cache; - store->initialize (transaction, ledger_cache); + store->initialize (transaction, ledger_cache, nano::dev::constants); ASSERT_EQ (1, ledger_cache.cemented_count); } @@ -927,7 +927,7 @@ TEST (block_store, block_random) { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger_cache); + store->initialize (transaction, ledger_cache, nano::dev::constants); } auto transaction (store->tx_begin_read ()); auto block (store->block.random (transaction)); @@ -946,7 +946,7 @@ TEST (block_store, pruned_random) { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger_cache); + store->initialize (transaction, ledger_cache, nano::dev::constants); store->pruned.put (transaction, hash1); } auto transaction (store->tx_begin_read ()); @@ -959,7 +959,7 @@ TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort ta { auto path (nano::unique_path ()); nano::logger_mt logger{}; - nano::mdb_store store{ logger, path, nano::dev::constants }; + nano::lmdb::store store{ logger, path, nano::dev::constants }; nano::unchecked_map unchecked{ store, false }; auto transaction (store.tx_begin_write ()); ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 1)); @@ -991,7 +991,7 @@ TEST (block_store, state_block) { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger_cache); + store->initialize (transaction, ledger_cache, nano::dev::constants); ASSERT_EQ (nano::block_type::state, block1.type ()); store->block.put (transaction, block1.hash (), block1); ASSERT_TRUE (store->block.exists (transaction, block1.hash ())); @@ -1022,12 +1022,12 @@ TEST (mdb_block_store, sideband_height) nano::keypair key1; nano::keypair key2; nano::keypair key3; - nano::mdb_store store (logger, nano::unique_path (), nano::dev::constants); + nano::lmdb::store store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store.init_error ()); nano::stat stat; nano::ledger ledger (store, stat, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); @@ -1290,11 +1290,11 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); { nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); nano::account_info account_info; ASSERT_FALSE (store.account.get (transaction, nano::dev::genesis->account (), account_info)); nano::confirmation_height_info confirmation_height_info; @@ -1344,7 +1344,7 @@ TEST (mdb_block_store, upgrade_v14_v15) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1397,11 +1397,11 @@ TEST (mdb_block_store, upgrade_v15_v16) nano::mdb_val value; { nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); // The representation table should get removed after, so readd it so that we can later confirm this actually happens auto txn = store.env.tx (transaction); ASSERT_FALSE (mdb_dbi_open (txn, "representation", MDB_CREATE, &store.representation_handle)); @@ -1418,7 +1418,7 @@ TEST (mdb_block_store, upgrade_v15_v16) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1448,11 +1448,11 @@ TEST (mdb_block_store, upgrade_v16_v17) nano::mdb_val value; { nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); @@ -1471,7 +1471,7 @@ TEST (mdb_block_store, upgrade_v16_v17) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1519,11 +1519,11 @@ TEST (mdb_block_store, upgrade_v17_v18) nano::state_block state_send_epoch_link (key2.pub, state_open.hash (), key2.pub, 0, nano::dev::network_params.ledger.epochs.link (nano::epoch::epoch_2), key2.prv, key2.pub, *pool.generate (state_open.hash ())); { nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); auto transaction (store.tx_begin_write ()); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send_zero).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_receive_zero).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch).code); @@ -1572,7 +1572,7 @@ TEST (mdb_block_store, upgrade_v17_v18) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1714,11 +1714,11 @@ TEST (mdb_block_store, upgrade_v18_v19) { nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); @@ -1749,7 +1749,7 @@ TEST (mdb_block_store, upgrade_v18_v19) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1797,16 +1797,16 @@ TEST (mdb_block_store, upgrade_v19_v20) nano::logger_mt logger; nano::stat stats; { - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, nano::dev::constants); // Delete pruned table ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.pruned_handle, 1)); store.version.put (transaction, 19); } // Upgrading should create the table - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); ASSERT_NE (store.pruned_handle, 0); @@ -1826,16 +1826,16 @@ TEST (mdb_block_store, upgrade_v20_v21) nano::logger_mt logger; nano::stat stats; { - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, ledger.constants); // Delete pruned table ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.final_votes_handle, 1)); store.version.put (transaction, 20); } // Upgrading should create the table - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); ASSERT_NE (store.final_votes_handle, 0); @@ -1869,7 +1869,7 @@ TEST (mdb_block_store, upgrade_backup) { nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants); + nano::lmdb::store store (logger, path, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.version.put (transaction, 14); } @@ -1877,7 +1877,7 @@ TEST (mdb_block_store, upgrade_backup) // Now do the upgrade and confirm that backup is saved nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::dev::constants, nano::txn_tracking_config{}, std::chrono::seconds (5), nano::lmdb_config{}, true); + nano::lmdb::store store (logger, path, nano::dev::constants, nano::txn_tracking_config{}, std::chrono::seconds (5), nano::lmdb_config{}, true); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); ASSERT_LT (14, store.version.get (transaction)); @@ -2027,10 +2027,10 @@ TEST (block_store, rocksdb_force_test_env_variable) auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); - auto mdb_cast = dynamic_cast (store.get ()); + auto mdb_cast = dynamic_cast (store.get ()); if (value && boost::lexical_cast (value) == 1) { - ASSERT_NE (boost::polymorphic_downcast (store.get ()), nullptr); + ASSERT_NE (boost::polymorphic_downcast (store.get ()), nullptr); } else { @@ -2048,7 +2048,7 @@ TEST (rocksdb_block_store, tombstone_count) { nano::system system{}; nano::logger_mt logger{}; - auto store = std::make_unique (logger, nano::unique_path (), nano::dev::constants); + auto store = std::make_unique (logger, nano::unique_path (), nano::dev::constants); nano::unchecked_map unchecked{ *store, false }; ASSERT_TRUE (!store->init_error ()); std::shared_ptr block = std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5); @@ -2069,7 +2069,7 @@ TEST (rocksdb_block_store, tombstone_count) namespace { -void write_sideband_v14 (nano::mdb_store & store_a, nano::transaction & transaction_a, nano::block const & block_a, MDB_dbi db_a) +void write_sideband_v14 (nano::lmdb::store & store_a, nano::transaction & transaction_a, nano::block const & block_a, MDB_dbi db_a) { auto block = store_a.block.get (transaction_a, block_a.hash ()); ASSERT_NE (block, nullptr); @@ -2086,7 +2086,7 @@ void write_sideband_v14 (nano::mdb_store & store_a, nano::transaction & transact ASSERT_FALSE (mdb_put (store_a.env.tx (transaction_a), block->sideband ().details.epoch == nano::epoch::epoch_0 ? store_a.state_blocks_v0_handle : store_a.state_blocks_v1_handle, nano::mdb_val (block_a.hash ()), &val, 0)); } -void write_sideband_v15 (nano::mdb_store & store_a, nano::transaction & transaction_a, nano::block const & block_a) +void write_sideband_v15 (nano::lmdb::store & store_a, nano::transaction & transaction_a, nano::block const & block_a) { auto block = store_a.block.get (transaction_a, block_a.hash ()); ASSERT_NE (block, nullptr); @@ -2105,7 +2105,7 @@ void write_sideband_v15 (nano::mdb_store & store_a, nano::transaction & transact ASSERT_FALSE (mdb_put (store_a.env.tx (transaction_a), store_a.state_blocks_handle, nano::mdb_val (block_a.hash ()), &val, 0)); } -void write_block_w_sideband_v18 (nano::mdb_store & store_a, MDB_dbi database, nano::write_transaction & transaction_a, nano::block const & block_a) +void write_block_w_sideband_v18 (nano::lmdb::store & store_a, MDB_dbi database, nano::write_transaction & transaction_a, nano::block const & block_a) { auto block = store_a.block.get (transaction_a, block_a.hash ()); ASSERT_NE (block, nullptr); @@ -2124,7 +2124,7 @@ void write_block_w_sideband_v18 (nano::mdb_store & store_a, MDB_dbi database, na store_a.del (transaction_a, nano::tables::blocks, nano::mdb_val (block_a.hash ())); } -void modify_account_info_to_v14 (nano::mdb_store & store, nano::transaction const & transaction, nano::account const & account, uint64_t confirmation_height, nano::block_hash const & rep_block) +void modify_account_info_to_v14 (nano::lmdb::store & store, nano::transaction const & transaction, nano::account const & account, uint64_t confirmation_height, nano::block_hash const & rep_block) { nano::account_info info; ASSERT_FALSE (store.account.get (transaction, account, info)); @@ -2133,7 +2133,7 @@ void modify_account_info_to_v14 (nano::mdb_store & store, nano::transaction cons ASSERT_EQ (status, 0); } -void modify_confirmation_height_to_v15 (nano::mdb_store & store, nano::transaction const & transaction, nano::account const & account, uint64_t confirmation_height) +void modify_confirmation_height_to_v15 (nano::lmdb::store & store, nano::transaction const & transaction, nano::account const & account, uint64_t confirmation_height) { auto status (mdb_put (store.env.tx (transaction), store.confirmation_height_handle, nano::mdb_val (account), nano::mdb_val (confirmation_height), 0)); ASSERT_EQ (status, 0); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 1bae89b9..6fbadd61 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -764,7 +764,7 @@ TEST (confirmation_heightDeathTest, rollback_added_block) auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); } uint64_t batch_write_size = 2048; @@ -840,7 +840,7 @@ TEST (confirmation_heightDeathTest, modified_chain) auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send).code); } @@ -911,7 +911,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) auto open = std::make_shared (key1.pub, 0, 0, nano::Gxrb_ratio, send->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *open).code); } @@ -1402,7 +1402,7 @@ TEST (confirmation_height, unbounded_block_cache_iteration) auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send->hash ())); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, nano::dev::constants); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); } @@ -1454,7 +1454,7 @@ TEST (confirmation_height, pruned_source) auto open2 = std::make_shared (key2.pub, 0, key1.pub, 50, send2->hash (), key2.prv, key2.pub, *pool.generate (key2.pub)); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, nano::dev::constants); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *open1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send2).code); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 5fd4d299..0e9bb0f3 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -18,7 +18,7 @@ TEST (ledger, store_error) return; } nano::logger_mt logger; - nano::mdb_store store (logger, boost::filesystem::path ("///"), nano::dev::constants); + nano::lmdb::store store (logger, boost::filesystem::path ("///"), nano::dev::constants); ASSERT_TRUE (store.init_error ()); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); @@ -47,7 +47,7 @@ TEST (ledger, genesis_balance) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); auto balance (ledger.account_balance (transaction, nano::dev::genesis->account ())); ASSERT_EQ (nano::dev::constants.genesis_amount, balance); auto amount (ledger.amount (transaction, nano::dev::genesis->account ())); @@ -72,7 +72,7 @@ TEST (ledger, process_modifies_sideband) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); - store->initialize (store->tx_begin_write (), ledger.cache); + store->initialize (store->tx_begin_write (), ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); @@ -88,7 +88,7 @@ TEST (ledger, process_send) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -187,7 +187,7 @@ TEST (ledger, process_receive) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -250,7 +250,7 @@ TEST (ledger, rollback_receiver) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -289,7 +289,7 @@ TEST (ledger, rollback_representation) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key5; nano::change_block change1 (nano::dev::genesis->hash (), key5.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -342,7 +342,7 @@ TEST (ledger, receive_rollback) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); @@ -359,7 +359,7 @@ TEST (ledger, process_duplicate) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -381,7 +381,7 @@ TEST (ledger, representative_genesis) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); ASSERT_FALSE (latest.is_zero ()); ASSERT_EQ (nano::dev::genesis->hash (), ledger.representative (transaction, latest)); @@ -395,7 +395,7 @@ TEST (ledger, weight) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); } @@ -408,7 +408,7 @@ TEST (ledger, representative_change) nano::ledger ledger (*store, stats, nano::dev::constants); nano::keypair key2; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); @@ -447,7 +447,7 @@ TEST (ledger, send_fork) nano::keypair key2; nano::keypair key3; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -467,7 +467,7 @@ TEST (ledger, receive_fork) nano::keypair key2; nano::keypair key3; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -493,7 +493,7 @@ TEST (ledger, open_fork) nano::keypair key2; nano::keypair key3; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -525,7 +525,7 @@ TEST (ledger, representation) nano::ledger ledger (*store, stats, nano::dev::constants); auto & rep_weights = ledger.cache.rep_weights; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; ASSERT_EQ (nano::dev::constants.genesis_amount, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key2; @@ -598,7 +598,7 @@ TEST (ledger, double_open) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key2; nano::send_block send1 (nano::dev::genesis->hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -617,7 +617,7 @@ TEST (ledger, double_receive) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key2; nano::send_block send1 (nano::dev::genesis->hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -898,7 +898,7 @@ TEST (ledger, fail_change_old) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::change_block block (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -916,7 +916,7 @@ TEST (ledger, fail_change_gap_previous) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::change_block block (1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::root (1))); @@ -932,7 +932,7 @@ TEST (ledger, fail_change_bad_signature) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::change_block block (nano::dev::genesis->hash (), key1.pub, nano::keypair ().prv, 0, *pool.generate (nano::dev::genesis->hash ())); @@ -948,7 +948,7 @@ TEST (ledger, fail_change_fork) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::change_block block1 (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -968,7 +968,7 @@ TEST (ledger, fail_send_old) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -986,7 +986,7 @@ TEST (ledger, fail_send_gap_previous) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block (1, key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::root (1))); @@ -1002,7 +1002,7 @@ TEST (ledger, fail_send_bad_signature) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block (nano::dev::genesis->hash (), key1.pub, 1, nano::keypair ().prv, 0, *pool.generate (nano::dev::genesis->hash ())); @@ -1018,7 +1018,7 @@ TEST (ledger, fail_send_negative_spend) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1036,7 +1036,7 @@ TEST (ledger, fail_send_fork) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1054,7 +1054,7 @@ TEST (ledger, fail_open_old) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1072,7 +1072,7 @@ TEST (ledger, fail_open_gap_source) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::open_block block2 (1, 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1088,7 +1088,7 @@ TEST (ledger, fail_open_bad_signature) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1106,7 +1106,7 @@ TEST (ledger, fail_open_fork_previous) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1128,7 +1128,7 @@ TEST (ledger, fail_open_account_mismatch) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1147,7 +1147,7 @@ TEST (ledger, fail_receive_old) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1169,7 +1169,7 @@ TEST (ledger, fail_receive_gap_source) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1194,7 +1194,7 @@ TEST (ledger, fail_receive_overreceive) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1216,7 +1216,7 @@ TEST (ledger, fail_receive_bad_signature) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1241,7 +1241,7 @@ TEST (ledger, fail_receive_gap_previous_opened) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1266,7 +1266,7 @@ TEST (ledger, fail_receive_gap_previous_unopened) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1288,7 +1288,7 @@ TEST (ledger, fail_receive_fork_previous) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1317,7 +1317,7 @@ TEST (ledger, fail_receive_received_source) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1365,7 +1365,7 @@ TEST (ledger, latest_root) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key; ASSERT_EQ (key.pub, ledger.latest_root (transaction, key.pub)); @@ -1384,7 +1384,7 @@ TEST (ledger, change_representative_move_representation) nano::ledger ledger (*store, stats, nano::dev::constants); nano::keypair key1; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); nano::send_block send (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1407,7 +1407,7 @@ TEST (ledger, send_open_receive_rollback) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -1469,7 +1469,7 @@ TEST (ledger, bootstrap_rep_weight) nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::send_block send (info1.head, key2.pub, std::numeric_limits::max () - 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); @@ -1501,7 +1501,7 @@ TEST (ledger, block_destination_source) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair dest; nano::uint128_t balance (nano::dev::constants.genesis_amount); @@ -1546,7 +1546,7 @@ TEST (ledger, state_account) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1561,7 +1561,7 @@ TEST (ledger, state_send_receive) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1602,7 +1602,7 @@ TEST (ledger, state_receive) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1636,7 +1636,7 @@ TEST (ledger, state_rep_change) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair rep; nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1663,7 +1663,7 @@ TEST (ledger, state_open) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1702,7 +1702,7 @@ TEST (ledger, send_after_state_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1719,7 +1719,7 @@ TEST (ledger, receive_after_state_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1736,7 +1736,7 @@ TEST (ledger, change_after_state_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1753,7 +1753,7 @@ TEST (ledger, state_unreceivable_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1776,7 +1776,7 @@ TEST (ledger, state_receive_bad_amount_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1799,7 +1799,7 @@ TEST (ledger, state_no_link_amount_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1816,7 +1816,7 @@ TEST (ledger, state_receive_wrong_account_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1840,7 +1840,7 @@ TEST (ledger, state_open_state_fork) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1860,7 +1860,7 @@ TEST (ledger, state_state_open_fork) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1881,7 +1881,7 @@ TEST (ledger, state_open_previous_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1898,7 +1898,7 @@ TEST (ledger, state_open_source_fail) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1915,7 +1915,7 @@ TEST (ledger, state_send_change) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair rep; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1942,7 +1942,7 @@ TEST (ledger, state_receive_change) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1978,7 +1978,7 @@ TEST (ledger, state_open_old) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1998,7 +1998,7 @@ TEST (ledger, state_receive_old) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2022,7 +2022,7 @@ TEST (ledger, state_rollback_send) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2053,7 +2053,7 @@ TEST (ledger, state_rollback_receive) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2079,7 +2079,7 @@ TEST (ledger, state_rollback_received_send) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2106,7 +2106,7 @@ TEST (ledger, state_rep_change_rollback) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair rep; nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2126,7 +2126,7 @@ TEST (ledger, state_open_rollback) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2152,7 +2152,7 @@ TEST (ledger, state_send_change_rollback) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair rep; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2173,7 +2173,7 @@ TEST (ledger, state_receive_change_rollback) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2196,7 +2196,7 @@ TEST (ledger, epoch_blocks_v1_general) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2266,7 +2266,7 @@ TEST (ledger, epoch_blocks_v2_general) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2331,7 +2331,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2411,7 +2411,7 @@ TEST (ledger, epoch_blocks_fork) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::send_block send1 (nano::dev::genesis->hash (), nano::account{}, nano::dev::constants.genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2592,7 +2592,7 @@ TEST (ledger, could_fit) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; // Test legacy and state change blocks could_fit @@ -2803,7 +2803,7 @@ TEST (ledger, confirmation_height_not_updated) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info account_info; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, account_info)); @@ -2863,7 +2863,7 @@ TEST (ledger, work_validation) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); - store->initialize (store->tx_begin_write (), ledger.cache); + store->initialize (store->tx_begin_write (), ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::block_builder builder; auto gen = nano::dev::genesis_key; @@ -2957,7 +2957,7 @@ TEST (ledger, dependents_confirmed) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *nano::dev::genesis)); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; @@ -3030,7 +3030,7 @@ TEST (ledger, dependents_confirmed_pruning) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; auto send1 = builder.state () @@ -3080,7 +3080,7 @@ TEST (ledger, block_confirmed) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); ASSERT_TRUE (ledger.block_confirmed (transaction, nano::dev::genesis->hash ())); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; @@ -3111,7 +3111,7 @@ TEST (ledger, cache) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); - store->initialize (store->tx_begin_write (), ledger.cache); + store->initialize (store->tx_begin_write (), ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::block_builder builder; @@ -3224,7 +3224,7 @@ TEST (ledger, pruning_action) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3280,7 +3280,7 @@ TEST (ledger, pruning_large_chain) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; size_t send_receive_pairs (20); auto last_hash (nano::dev::genesis->hash ()); @@ -3316,7 +3316,7 @@ TEST (ledger, pruning_source_rollback) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); @@ -3367,7 +3367,7 @@ TEST (ledger, pruning_source_rollback_legacy) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3445,7 +3445,7 @@ TEST (ledger, pruning_process_error) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3474,7 +3474,7 @@ TEST (ledger, pruning_legacy_blocks) ledger.pruning = true; nano::keypair key1; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3518,7 +3518,7 @@ TEST (ledger, pruning_safe_functions) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3560,7 +3560,7 @@ TEST (ledger, hash_root_random) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3600,7 +3600,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) nano::logger_mt logger{}; boost::asio::ip::address_v6 address (boost::asio::ip::make_address_v6 ("::ffff:127.0.0.1")); uint16_t port = 100; - nano::mdb_store store{ logger, path / "data.ldb", nano::dev::constants }; + nano::lmdb::store store{ logger, path / "data.ldb", nano::dev::constants }; nano::unchecked_map unchecked{ store, false }; nano::stat stats{}; nano::ledger ledger{ store, stats, nano::dev::constants }; @@ -3621,7 +3621,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) { auto transaction = store.tx_begin_write (); - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, ledger.constants); ASSERT_FALSE (store.init_error ()); // Lower the database to the max version unsupported for upgrades @@ -3642,7 +3642,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) auto error = ledger.migrate_lmdb_to_rocksdb (path); ASSERT_FALSE (error); - nano::rocksdb_store rocksdb_store{ logger, path / "rocksdb", nano::dev::constants }; + nano::rocksdb::store rocksdb_store{ logger, path / "rocksdb", nano::dev::constants }; nano::unchecked_map rocksdb_unchecked{ rocksdb_store, false }; auto rocksdb_transaction (rocksdb_store.tx_begin_read ()); @@ -3678,7 +3678,7 @@ TEST (ledger, unconfirmed_frontiers) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); - store->initialize (store->tx_begin_write (), ledger.cache); + store->initialize (store->tx_begin_write (), ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; auto unconfirmed_frontiers = ledger.unconfirmed_frontiers (); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 79f11279..72002447 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -3345,7 +3345,7 @@ TEST (node, dont_write_lock_node) { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger_cache); + store->initialize (transaction, ledger_cache, nano::dev::constants); } // Hold write lock open until main thread is done needing it diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 1cf5bf49..6ad777b5 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -15,7 +15,7 @@ TEST (processor_service, bad_send_signature) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -33,7 +33,7 @@ TEST (processor_service, bad_receive_signature) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); diff --git a/nano/node/lmdb/account_store.cpp b/nano/node/lmdb/account_store.cpp index cd5ede2a..53b1749b 100644 --- a/nano/node/lmdb/account_store.cpp +++ b/nano/node/lmdb/account_store.cpp @@ -1,7 +1,8 @@ #include #include +#include -nano::lmdb::account_store::account_store (nano::mdb_store & store_a) : +nano::lmdb::account_store::account_store (nano::lmdb::store & store_a) : store (store_a){}; void nano::lmdb::account_store::put (nano::write_transaction const & transaction, nano::account const & account, nano::account_info const & info) @@ -27,7 +28,7 @@ bool nano::lmdb::account_store::get (nano::transaction const & transaction, nano void nano::lmdb::account_store::del (nano::write_transaction const & transaction_a, nano::account const & account_a) { auto status = store.del (transaction_a, tables::accounts, account_a); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::lmdb::account_store::exists (nano::transaction const & transaction_a, nano::account const & account_a) diff --git a/nano/node/lmdb/account_store.hpp b/nano/node/lmdb/account_store.hpp index cc1fd1de..41ee8d76 100644 --- a/nano/node/lmdb/account_store.hpp +++ b/nano/node/lmdb/account_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class account_store : public nano::account_store { private: - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit account_store (nano::mdb_store & store_a); + explicit account_store (nano::lmdb::store & store_a); void put (nano::write_transaction const & transaction, nano::account const & account, nano::account_info const & info) override; bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::account_info & info_a) override; void del (nano::write_transaction const & transaction_a, nano::account const & account_a) override; diff --git a/nano/node/lmdb/block_store.cpp b/nano/node/lmdb/block_store.cpp index 44ffaf5e..b82718af 100644 --- a/nano/node/lmdb/block_store.cpp +++ b/nano/node/lmdb/block_store.cpp @@ -1,5 +1,6 @@ #include #include +#include namespace nano { @@ -22,7 +23,7 @@ public: }; } -nano::lmdb::block_store::block_store (nano::mdb_store & store_a) : +nano::lmdb::block_store::block_store (nano::lmdb::store & store_a) : store{ store_a } {}; void nano::lmdb::block_store::put (nano::write_transaction const & transaction, nano::block_hash const & hash, nano::block const & block) @@ -44,7 +45,7 @@ void nano::lmdb::block_store::raw_put (nano::write_transaction const & transacti { nano::mdb_val value{ data.size (), (void *)data.data () }; auto status = store.put (transaction_a, tables::blocks, hash_a, value); - release_assert_success (store, status); + store.release_assert_success (status); } nano::block_hash nano::lmdb::block_store::successor (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const @@ -130,7 +131,7 @@ std::shared_ptr nano::lmdb::block_store::random (nano::transaction void nano::lmdb::block_store::del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) { auto status = store.del (transaction_a, tables::blocks, hash_a); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::lmdb::block_store::exists (nano::transaction const & transaction, nano::block_hash const & hash) diff --git a/nano/node/lmdb/block_store.hpp b/nano/node/lmdb/block_store.hpp index 449540f7..28c1c54f 100644 --- a/nano/node/lmdb/block_store.hpp +++ b/nano/node/lmdb/block_store.hpp @@ -4,18 +4,18 @@ namespace nano { -class mdb_store; using mdb_val = db_val; class block_predecessor_mdb_set; namespace lmdb { + class store; class block_store : public nano::block_store { friend class nano::block_predecessor_mdb_set; - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit block_store (nano::mdb_store & store_a); + explicit block_store (nano::lmdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, nano::block const & block_a) override; void raw_put (nano::write_transaction const & transaction_a, std::vector const & data, nano::block_hash const & hash_a) override; nano::block_hash successor (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override; diff --git a/nano/node/lmdb/confirmation_height_store.cpp b/nano/node/lmdb/confirmation_height_store.cpp index 5915cae2..139b263a 100644 --- a/nano/node/lmdb/confirmation_height_store.cpp +++ b/nano/node/lmdb/confirmation_height_store.cpp @@ -1,7 +1,8 @@ #include #include +#include -nano::lmdb::confirmation_height_store::confirmation_height_store (nano::mdb_store & store) : +nano::lmdb::confirmation_height_store::confirmation_height_store (nano::lmdb::store & store) : store{ store } { } @@ -9,7 +10,7 @@ nano::lmdb::confirmation_height_store::confirmation_height_store (nano::mdb_stor void nano::lmdb::confirmation_height_store::put (nano::write_transaction const & transaction, nano::account const & account, nano::confirmation_height_info const & confirmation_height_info) { auto status = store.put (transaction, tables::confirmation_height, account, confirmation_height_info); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::lmdb::confirmation_height_store::get (nano::transaction const & transaction, nano::account const & account, nano::confirmation_height_info & confirmation_height_info) @@ -40,7 +41,7 @@ bool nano::lmdb::confirmation_height_store::exists (nano::transaction const & tr void nano::lmdb::confirmation_height_store::del (nano::write_transaction const & transaction, nano::account const & account) { auto status = store.del (transaction, tables::confirmation_height, account); - release_assert_success (store, status); + store.release_assert_success (status); } uint64_t nano::lmdb::confirmation_height_store::count (nano::transaction const & transaction_a) diff --git a/nano/node/lmdb/confirmation_height_store.hpp b/nano/node/lmdb/confirmation_height_store.hpp index 6ca23919..08d8daf6 100644 --- a/nano/node/lmdb/confirmation_height_store.hpp +++ b/nano/node/lmdb/confirmation_height_store.hpp @@ -4,15 +4,15 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class confirmation_height_store : public nano::confirmation_height_store { - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit confirmation_height_store (nano::mdb_store & store_a); + explicit confirmation_height_store (nano::lmdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info const & confirmation_height_info_a) override; bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info & confirmation_height_info_a) override; bool exists (nano::transaction const & transaction_a, nano::account const & account_a) const override; diff --git a/nano/node/lmdb/final_vote_store.cpp b/nano/node/lmdb/final_vote_store.cpp index 30fba657..6b7dfccf 100644 --- a/nano/node/lmdb/final_vote_store.cpp +++ b/nano/node/lmdb/final_vote_store.cpp @@ -1,7 +1,8 @@ #include #include +#include -nano::lmdb::final_vote_store::final_vote_store (nano::mdb_store & store) : +nano::lmdb::final_vote_store::final_vote_store (nano::lmdb::store & store) : store{ store } {}; bool nano::lmdb::final_vote_store::put (nano::write_transaction const & transaction, nano::qualified_root const & root, nano::block_hash const & hash) @@ -17,7 +18,7 @@ bool nano::lmdb::final_vote_store::put (nano::write_transaction const & transact else { status = store.put (transaction, tables::final_votes, root, hash); - release_assert_success (store, status); + store.release_assert_success (status); } return result; } @@ -44,7 +45,7 @@ void nano::lmdb::final_vote_store::del (nano::write_transaction const & transact for (auto & final_vote_qualified_root : final_vote_qualified_roots) { auto status = store.del (transaction, tables::final_votes, final_vote_qualified_root); - release_assert_success (store, status); + store.release_assert_success (status); } } diff --git a/nano/node/lmdb/final_vote_store.hpp b/nano/node/lmdb/final_vote_store.hpp index 4ee5ae8f..9bc8c218 100644 --- a/nano/node/lmdb/final_vote_store.hpp +++ b/nano/node/lmdb/final_vote_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class final_vote_store : public nano::final_vote_store { private: - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit final_vote_store (nano::mdb_store & store); + explicit final_vote_store (nano::lmdb::store & store); bool put (nano::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) override; std::vector get (nano::transaction const & transaction_a, nano::root const & root_a) override; void del (nano::write_transaction const & transaction_a, nano::root const & root_a) override; diff --git a/nano/node/lmdb/frontier_store.cpp b/nano/node/lmdb/frontier_store.cpp index ed39ad33..f10ff9ff 100644 --- a/nano/node/lmdb/frontier_store.cpp +++ b/nano/node/lmdb/frontier_store.cpp @@ -1,7 +1,8 @@ #include #include +#include -nano::lmdb::frontier_store::frontier_store (nano::mdb_store & store) : +nano::lmdb::frontier_store::frontier_store (nano::lmdb::store & store) : store{ store } { } @@ -9,7 +10,7 @@ nano::lmdb::frontier_store::frontier_store (nano::mdb_store & store) : void nano::lmdb::frontier_store::put (nano::write_transaction const & transaction, nano::block_hash const & hash, nano::account const & account) { auto status = store.put (transaction, tables::frontiers, hash, account); - release_assert_success (store, status); + store.release_assert_success (status); } nano::account nano::lmdb::frontier_store::get (nano::transaction const & transaction, nano::block_hash const & hash) const @@ -28,7 +29,7 @@ nano::account nano::lmdb::frontier_store::get (nano::transaction const & transac void nano::lmdb::frontier_store::del (nano::write_transaction const & transaction, nano::block_hash const & hash) { auto status = store.del (transaction, tables::frontiers, hash); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::lmdb::frontier_store::begin (nano::transaction const & transaction) const diff --git a/nano/node/lmdb/frontier_store.hpp b/nano/node/lmdb/frontier_store.hpp index 345ca5f9..805d2717 100644 --- a/nano/node/lmdb/frontier_store.hpp +++ b/nano/node/lmdb/frontier_store.hpp @@ -4,13 +4,13 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class frontier_store : public nano::frontier_store { public: - frontier_store (nano::mdb_store & store); + frontier_store (nano::lmdb::store & store); void put (nano::write_transaction const &, nano::block_hash const &, nano::account const &) override; nano::account get (nano::transaction const &, nano::block_hash const &) const override; void del (nano::write_transaction const &, nano::block_hash const &) override; @@ -20,7 +20,7 @@ namespace lmdb void for_each_par (std::function, nano::store_iterator)> const & action_a) const override; private: - nano::mdb_store & store; + nano::lmdb::store & store; }; } } diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 6df9b935..8b273aa3 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -40,10 +40,9 @@ void mdb_val::convert_buffer_to_value () } } -nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::ledger_constants & constants, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade_a) : +nano::lmdb::store::store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::ledger_constants & constants, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade_a) : // clang-format off - store_partial{ - constants, + nano::store{ block_store, frontier_store, account_store, @@ -83,7 +82,7 @@ nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path is_fresh_db = err != MDB_SUCCESS; if (err == MDB_SUCCESS) { - is_fully_upgraded = (version.get (transaction) == version_number); + is_fully_upgraded = (version.get (transaction) == version_current); mdb_dbi_close (env, meta_handle); } } @@ -107,7 +106,7 @@ nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path open_databases (error, transaction, MDB_CREATE); if (!error) { - error |= do_upgrades (transaction, needs_vacuuming); + error |= do_upgrades (transaction, constants, needs_vacuuming); } } @@ -126,7 +125,7 @@ nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path } } -bool nano::mdb_store::vacuum_after_upgrade (boost::filesystem::path const & path_a, nano::lmdb_config const & lmdb_config_a) +bool nano::lmdb::store::vacuum_after_upgrade (boost::filesystem::path const & path_a, nano::lmdb_config const & lmdb_config_a) { // Vacuum the database. This is not a required step and may actually fail if there isn't enough storage space. auto vacuum_path = path_a.parent_path () / "vacuumed.ldb"; @@ -161,12 +160,12 @@ bool nano::mdb_store::vacuum_after_upgrade (boost::filesystem::path const & path return vacuum_success; } -void nano::mdb_store::serialize_mdb_tracker (boost::property_tree::ptree & json, std::chrono::milliseconds min_read_time, std::chrono::milliseconds min_write_time) +void nano::lmdb::store::serialize_mdb_tracker (boost::property_tree::ptree & json, std::chrono::milliseconds min_read_time, std::chrono::milliseconds min_write_time) { mdb_txn_tracker.serialize_json (json, min_read_time, min_write_time); } -void nano::mdb_store::serialize_memory_stats (boost::property_tree::ptree & json) +void nano::lmdb::store::serialize_memory_stats (boost::property_tree::ptree & json) { MDB_stat stats; auto status (mdb_env_stat (env.environment, &stats)); @@ -179,22 +178,22 @@ void nano::mdb_store::serialize_memory_stats (boost::property_tree::ptree & json json.put ("page_size", stats.ms_psize); } -nano::write_transaction nano::mdb_store::tx_begin_write (std::vector const &, std::vector const &) +nano::write_transaction nano::lmdb::store::tx_begin_write (std::vector const &, std::vector const &) { return env.tx_begin_write (create_txn_callbacks ()); } -nano::read_transaction nano::mdb_store::tx_begin_read () const +nano::read_transaction nano::lmdb::store::tx_begin_read () const { return env.tx_begin_read (create_txn_callbacks ()); } -std::string nano::mdb_store::vendor_get () const +std::string nano::lmdb::store::vendor_get () const { return boost::str (boost::format ("LMDB %1%.%2%.%3%") % MDB_VERSION_MAJOR % MDB_VERSION_MINOR % MDB_VERSION_PATCH); } -nano::mdb_txn_callbacks nano::mdb_store::create_txn_callbacks () const +nano::mdb_txn_callbacks nano::lmdb::store::create_txn_callbacks () const { nano::mdb_txn_callbacks mdb_txn_callbacks; if (txn_tracking_enabled) @@ -209,7 +208,7 @@ nano::mdb_txn_callbacks nano::mdb_store::create_txn_callbacks () const return mdb_txn_callbacks; } -void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & transaction_a, unsigned flags) +void nano::lmdb::store::open_databases (bool & error_a, nano::transaction const & transaction_a, unsigned flags) { error_a |= mdb_dbi_open (env.tx (transaction_a), "frontiers", flags, &frontiers_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "unchecked", flags, &unchecked_handle) != 0; @@ -260,7 +259,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & } } -bool nano::mdb_store::do_upgrades (nano::write_transaction & transaction_a, bool & needs_vacuuming) +bool nano::lmdb::store::do_upgrades (nano::write_transaction & transaction_a, nano::ledger_constants & constants, bool & needs_vacuuming) { auto error (false); auto version_l = version.get (transaction_a); @@ -279,7 +278,7 @@ bool nano::mdb_store::do_upgrades (nano::write_transaction & transaction_a, bool case 11: case 12: case 13: - logger.always_log (boost::str (boost::format ("The version of the ledger (%1%) is lower than the minimum (%2%) which is supported for upgrades. Either upgrade to a v19, v20 or v21 node first or delete the ledger.") % version_l % minimum_version)); + logger.always_log (boost::str (boost::format ("The version of the ledger (%1%) is lower than the minimum (%2%) which is supported for upgrades. Either upgrade to a v19, v20 or v21 node first or delete the ledger.") % version_l % version_minimum)); error = true; break; case 14: @@ -293,7 +292,7 @@ bool nano::mdb_store::do_upgrades (nano::write_transaction & transaction_a, bool upgrade_v16_to_v17 (transaction_a); [[fallthrough]]; case 17: - upgrade_v17_to_v18 (transaction_a); + upgrade_v17_to_v18 (transaction_a, constants); [[fallthrough]]; // Upgrades to version 19 & 20 are both part of the v22 node release case 18: @@ -316,7 +315,7 @@ bool nano::mdb_store::do_upgrades (nano::write_transaction & transaction_a, bool return error; } -void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_a) +void nano::lmdb::store::upgrade_v14_to_v15 (nano::write_transaction & transaction_a) { logger.always_log ("Preparing v14 to v15 database upgrade..."); @@ -434,7 +433,7 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ logger.always_log ("Finished epoch merge upgrade"); } -void nano::mdb_store::upgrade_v15_to_v16 (nano::write_transaction const & transaction_a) +void nano::lmdb::store::upgrade_v15_to_v16 (nano::write_transaction const & transaction_a) { // Representation table is no longer used debug_assert (representation_handle != 0); @@ -447,7 +446,7 @@ void nano::mdb_store::upgrade_v15_to_v16 (nano::write_transaction const & transa version.put (transaction_a, 16); } -void nano::mdb_store::upgrade_v16_to_v17 (nano::write_transaction const & transaction_a) +void nano::lmdb::store::upgrade_v16_to_v17 (nano::write_transaction const & transaction_a) { logger.always_log ("Preparing v16 to v17 database upgrade..."); @@ -526,7 +525,7 @@ void nano::mdb_store::upgrade_v16_to_v17 (nano::write_transaction const & transa logger.always_log ("Finished upgrading confirmation height frontiers"); } -void nano::mdb_store::upgrade_v17_to_v18 (nano::write_transaction const & transaction_a) +void nano::lmdb::store::upgrade_v17_to_v18 (nano::write_transaction const & transaction_a, nano::ledger_constants & constants) { logger.always_log ("Preparing v17 to v18 database upgrade..."); @@ -588,7 +587,7 @@ void nano::mdb_store::upgrade_v17_to_v18 (nano::write_transaction const & transa logger.always_log ("Finished upgrading the sideband"); } -void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transaction_a) +void nano::lmdb::store::upgrade_v18_to_v19 (nano::write_transaction const & transaction_a) { logger.always_log ("Preparing v18 to v19 database upgrade..."); auto count_pre (count (transaction_a, state_blocks_handle) + count (transaction_a, send_blocks_handle) + count (transaction_a, receive_blocks_handle) + count (transaction_a, change_blocks_handle) + count (transaction_a, open_blocks_handle)); @@ -764,7 +763,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa logger.always_log ("Finished upgrading all blocks to new blocks database"); } -void nano::mdb_store::upgrade_v19_to_v20 (nano::write_transaction const & transaction_a) +void nano::lmdb::store::upgrade_v19_to_v20 (nano::write_transaction const & transaction_a) { logger.always_log ("Preparing v19 to v20 database upgrade..."); mdb_dbi_open (env.tx (transaction_a), "pruned", MDB_CREATE, &pruned_handle); @@ -772,7 +771,7 @@ void nano::mdb_store::upgrade_v19_to_v20 (nano::write_transaction const & transa logger.always_log ("Finished creating new pruned table"); } -void nano::mdb_store::upgrade_v20_to_v21 (nano::write_transaction const & transaction_a) +void nano::lmdb::store::upgrade_v20_to_v21 (nano::write_transaction const & transaction_a) { logger.always_log ("Preparing v20 to v21 database upgrade..."); mdb_dbi_open (env.tx (transaction_a), "final_votes", MDB_CREATE, &final_votes_handle); @@ -781,7 +780,7 @@ void nano::mdb_store::upgrade_v20_to_v21 (nano::write_transaction const & transa } /** Takes a filepath, appends '_backup_' to the end (but before any extension) and saves that file in the same directory */ -void nano::mdb_store::create_backup_file (nano::mdb_env & env_a, boost::filesystem::path const & filepath_a, nano::logger_mt & logger_a) +void nano::lmdb::store::create_backup_file (nano::mdb_env & env_a, boost::filesystem::path const & filepath_a, nano::logger_mt & logger_a) { auto extension = filepath_a.extension (); auto filename_without_extension = filepath_a.filename ().replace_extension (""); @@ -811,7 +810,7 @@ void nano::mdb_store::create_backup_file (nano::mdb_env & env_a, boost::filesyst } } -bool nano::mdb_store::exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const +bool nano::lmdb::store::exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const { nano::mdb_val junk; auto status = get (transaction_a, table_a, key_a, junk); @@ -819,37 +818,37 @@ bool nano::mdb_store::exists (nano::transaction const & transaction_a, tables ta return (status == MDB_SUCCESS); } -int nano::mdb_store::get (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val & value_a) const +int nano::lmdb::store::get (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val & value_a) const { return mdb_get (env.tx (transaction_a), table_to_dbi (table_a), key_a, value_a); } -int nano::mdb_store::put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val const & value_a) const +int nano::lmdb::store::put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val const & value_a) const { return (mdb_put (env.tx (transaction_a), table_to_dbi (table_a), key_a, value_a, 0)); } -int nano::mdb_store::del (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const +int nano::lmdb::store::del (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const { return (mdb_del (env.tx (transaction_a), table_to_dbi (table_a), key_a, nullptr)); } -int nano::mdb_store::drop (nano::write_transaction const & transaction_a, tables table_a) +int nano::lmdb::store::drop (nano::write_transaction const & transaction_a, tables table_a) { return clear (transaction_a, table_to_dbi (table_a)); } -int nano::mdb_store::clear (nano::write_transaction const & transaction_a, MDB_dbi handle_a) +int nano::lmdb::store::clear (nano::write_transaction const & transaction_a, MDB_dbi handle_a) { return mdb_drop (env.tx (transaction_a), handle_a, 0); } -uint64_t nano::mdb_store::count (nano::transaction const & transaction_a, tables table_a) const +uint64_t nano::lmdb::store::count (nano::transaction const & transaction_a, tables table_a) const { return count (transaction_a, table_to_dbi (table_a)); } -uint64_t nano::mdb_store::count (nano::transaction const & transaction_a, MDB_dbi db_a) const +uint64_t nano::lmdb::store::count (nano::transaction const & transaction_a, MDB_dbi db_a) const { MDB_stat stats; auto status (mdb_stat (env.tx (transaction_a), db_a, &stats)); @@ -857,7 +856,7 @@ uint64_t nano::mdb_store::count (nano::transaction const & transaction_a, MDB_db return (stats.ms_entries); } -MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const +MDB_dbi nano::lmdb::store::table_to_dbi (tables table_a) const { switch (table_a) { @@ -889,32 +888,32 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const } } -bool nano::mdb_store::not_found (int status) const +bool nano::lmdb::store::not_found (int status) const { return (status_code_not_found () == status); } -bool nano::mdb_store::success (int status) const +bool nano::lmdb::store::success (int status) const { return (MDB_SUCCESS == status); } -int nano::mdb_store::status_code_not_found () const +int nano::lmdb::store::status_code_not_found () const { return MDB_NOTFOUND; } -std::string nano::mdb_store::error_string (int status) const +std::string nano::lmdb::store::error_string (int status) const { return mdb_strerror (status); } -bool nano::mdb_store::copy_db (boost::filesystem::path const & destination_file) +bool nano::lmdb::store::copy_db (boost::filesystem::path const & destination_file) { return !mdb_env_copy2 (env.environment, destination_file.string ().c_str (), MDB_CP_COMPACT); } -void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) +void nano::lmdb::store::rebuild_db (nano::write_transaction const & transaction_a) { // Tables with uint256_union key std::vector tables = { accounts_handle, blocks_handle, pruned_handle, confirmation_height_handle }; @@ -964,12 +963,12 @@ void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) } } -bool nano::mdb_store::init_error () const +bool nano::lmdb::store::init_error () const { return error; } -std::shared_ptr nano::mdb_store::block_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const +std::shared_ptr nano::lmdb::store::block_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const { nano::block_type type; auto value (block_raw_get_v18 (transaction_a, hash_a, type)); @@ -987,7 +986,7 @@ std::shared_ptr nano::mdb_store::block_get_v18 (nano::transaction c return result; } -nano::mdb_val nano::mdb_store::block_raw_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const +nano::mdb_val nano::lmdb::store::block_raw_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const { nano::mdb_val result; // Table lookups are ordered by match probability @@ -1006,7 +1005,7 @@ nano::mdb_val nano::mdb_store::block_raw_get_v18 (nano::transaction const & tran return result; } -boost::optional nano::mdb_store::block_raw_get_by_type_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const +boost::optional nano::lmdb::store::block_raw_get_by_type_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const { nano::mdb_val value; nano::mdb_val hash (hash_a); @@ -1054,7 +1053,7 @@ boost::optional nano::mdb_store::block_raw_get_by_type_v18 (nano: return result; } -nano::uint128_t nano::mdb_store::block_balance_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const +nano::uint128_t nano::lmdb::store::block_balance_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const { auto block (block_get_v18 (transaction_a, hash_a)); release_assert (block); @@ -1063,12 +1062,12 @@ nano::uint128_t nano::mdb_store::block_balance_v18 (nano::transaction const & tr } // All the v14 functions below are only needed during upgrades -std::size_t nano::mdb_store::block_successor_offset_v14 (nano::transaction const & transaction_a, std::size_t entry_size_a, nano::block_type type_a) const +std::size_t nano::lmdb::store::block_successor_offset_v14 (nano::transaction const & transaction_a, std::size_t entry_size_a, nano::block_type type_a) const { return entry_size_a - nano::block_sideband_v14::size (type_a); } -nano::block_hash nano::mdb_store::block_successor_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const +nano::block_hash nano::lmdb::store::block_successor_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const { nano::block_type type; auto value (block_raw_get_v14 (transaction_a, hash_a, type)); @@ -1088,7 +1087,7 @@ nano::block_hash nano::mdb_store::block_successor_v14 (nano::transaction const & return result; } -nano::mdb_val nano::mdb_store::block_raw_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1) const +nano::mdb_val nano::lmdb::store::block_raw_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1) const { nano::mdb_val result; // Table lookups are ordered by match probability @@ -1107,7 +1106,7 @@ nano::mdb_val nano::mdb_store::block_raw_get_v14 (nano::transaction const & tran return result; } -boost::optional nano::mdb_store::block_raw_get_by_type_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1) const +boost::optional nano::lmdb::store::block_raw_get_by_type_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1) const { nano::mdb_val value; nano::mdb_val hash (hash_a); @@ -1163,7 +1162,7 @@ boost::optional nano::mdb_store::block_raw_get_by_type_v14 (nano: return result; } -std::shared_ptr nano::mdb_store::block_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_sideband_v14 * sideband_a, bool * is_state_v1) const +std::shared_ptr nano::lmdb::store::block_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_sideband_v14 * sideband_a, bool * is_state_v1) const { nano::block_type type; auto value (block_raw_get_v14 (transaction_a, hash_a, type, is_state_v1)); @@ -1184,21 +1183,18 @@ std::shared_ptr nano::mdb_store::block_get_v14 (nano::transaction c return result; } -nano::mdb_store::upgrade_counters::upgrade_counters (uint64_t count_before_v0, uint64_t count_before_v1) : +nano::lmdb::store::upgrade_counters::upgrade_counters (uint64_t count_before_v0, uint64_t count_before_v1) : before_v0 (count_before_v0), before_v1 (count_before_v1) { } -bool nano::mdb_store::upgrade_counters::are_equal () const +bool nano::lmdb::store::upgrade_counters::are_equal () const { return (before_v0 == after_v0) && (before_v1 == after_v1); } -unsigned nano::mdb_store::max_block_write_batch_num () const +unsigned nano::lmdb::store::max_block_write_batch_num () const { return std::numeric_limits::max (); } - -// Explicitly instantiate -template class nano::store_partial; diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index 71e7cfdb..93b1c199 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -39,285 +38,287 @@ namespace nano using mdb_val = db_val; class logging_mt; -class mdb_store; class transaction; -/** +namespace lmdb +{ + /** * mdb implementation of the block store */ -class mdb_store : public store_partial -{ -private: - nano::lmdb::account_store account_store; - nano::lmdb::block_store block_store; - nano::lmdb::confirmation_height_store confirmation_height_store; - nano::lmdb::final_vote_store final_vote_store; - nano::lmdb::frontier_store frontier_store; - nano::lmdb::online_weight_store online_weight_store; - nano::lmdb::peer_store peer_store; - nano::lmdb::pending_store pending_store; - nano::lmdb::pruned_store pruned_store; - nano::lmdb::unchecked_store unchecked_store; - nano::lmdb::version_store version_store; + class store : public nano::store + { + private: + nano::lmdb::account_store account_store; + nano::lmdb::block_store block_store; + nano::lmdb::confirmation_height_store confirmation_height_store; + nano::lmdb::final_vote_store final_vote_store; + nano::lmdb::frontier_store frontier_store; + nano::lmdb::online_weight_store online_weight_store; + nano::lmdb::peer_store peer_store; + nano::lmdb::pending_store pending_store; + nano::lmdb::pruned_store pruned_store; + nano::lmdb::unchecked_store unchecked_store; + nano::lmdb::version_store version_store; - friend class nano::lmdb::account_store; - friend class nano::lmdb::block_store; - friend class nano::lmdb::confirmation_height_store; - friend class nano::lmdb::final_vote_store; - friend class nano::lmdb::frontier_store; - friend class nano::lmdb::online_weight_store; - friend class nano::lmdb::peer_store; - friend class nano::lmdb::pending_store; - friend class nano::lmdb::pruned_store; - friend class nano::lmdb::unchecked_store; - friend class nano::lmdb::version_store; + friend class nano::lmdb::account_store; + friend class nano::lmdb::block_store; + friend class nano::lmdb::confirmation_height_store; + friend class nano::lmdb::final_vote_store; + friend class nano::lmdb::frontier_store; + friend class nano::lmdb::online_weight_store; + friend class nano::lmdb::peer_store; + friend class nano::lmdb::pending_store; + friend class nano::lmdb::pruned_store; + friend class nano::lmdb::unchecked_store; + friend class nano::lmdb::version_store; -public: - mdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::ledger_constants & constants, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); - nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; - nano::read_transaction tx_begin_read () const override; + public: + store (nano::logger_mt &, boost::filesystem::path const &, nano::ledger_constants & constants, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); + nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; + nano::read_transaction tx_begin_read () const override; - std::string vendor_get () const override; + std::string vendor_get () const override; - void serialize_mdb_tracker (boost::property_tree::ptree &, std::chrono::milliseconds, std::chrono::milliseconds) override; + void serialize_mdb_tracker (boost::property_tree::ptree &, std::chrono::milliseconds, std::chrono::milliseconds) override; - static void create_backup_file (nano::mdb_env &, boost::filesystem::path const &, nano::logger_mt &); + static void create_backup_file (nano::mdb_env &, boost::filesystem::path const &, nano::logger_mt &); - void serialize_memory_stats (boost::property_tree::ptree &) override; + void serialize_memory_stats (boost::property_tree::ptree &) override; - unsigned max_block_write_batch_num () const override; + unsigned max_block_write_batch_num () const override; -private: - nano::logger_mt & logger; - bool error{ false }; + private: + nano::logger_mt & logger; + bool error{ false }; -public: - nano::mdb_env env; + public: + nano::mdb_env env; - /** + /** * Maps head block to owning account * nano::block_hash -> nano::account */ - MDB_dbi frontiers_handle{ 0 }; + MDB_dbi frontiers_handle{ 0 }; - /** + /** * Maps account v1 to account information, head, rep, open, balance, timestamp and block count. (Removed) * nano::account -> nano::block_hash, nano::block_hash, nano::block_hash, nano::amount, uint64_t, uint64_t */ - MDB_dbi accounts_v0_handle{ 0 }; + MDB_dbi accounts_v0_handle{ 0 }; - /** + /** * Maps account v0 to account information, head, rep, open, balance, timestamp and block count. (Removed) * nano::account -> nano::block_hash, nano::block_hash, nano::block_hash, nano::amount, uint64_t, uint64_t */ - MDB_dbi accounts_v1_handle{ 0 }; + MDB_dbi accounts_v1_handle{ 0 }; - /** + /** * Maps account v0 to account information, head, rep, open, balance, timestamp, block count and epoch * nano::account -> nano::block_hash, nano::block_hash, nano::block_hash, nano::amount, uint64_t, uint64_t, nano::epoch */ - MDB_dbi accounts_handle{ 0 }; + MDB_dbi accounts_handle{ 0 }; - /** + /** * Maps block hash to send block. (Removed) * nano::block_hash -> nano::send_block */ - MDB_dbi send_blocks_handle{ 0 }; + MDB_dbi send_blocks_handle{ 0 }; - /** + /** * Maps block hash to receive block. (Removed) * nano::block_hash -> nano::receive_block */ - MDB_dbi receive_blocks_handle{ 0 }; + MDB_dbi receive_blocks_handle{ 0 }; - /** + /** * Maps block hash to open block. (Removed) * nano::block_hash -> nano::open_block */ - MDB_dbi open_blocks_handle{ 0 }; + MDB_dbi open_blocks_handle{ 0 }; - /** + /** * Maps block hash to change block. (Removed) * nano::block_hash -> nano::change_block */ - MDB_dbi change_blocks_handle{ 0 }; + MDB_dbi change_blocks_handle{ 0 }; - /** + /** * Maps block hash to v0 state block. (Removed) * nano::block_hash -> nano::state_block */ - MDB_dbi state_blocks_v0_handle{ 0 }; + MDB_dbi state_blocks_v0_handle{ 0 }; - /** + /** * Maps block hash to v1 state block. (Removed) * nano::block_hash -> nano::state_block */ - MDB_dbi state_blocks_v1_handle{ 0 }; + MDB_dbi state_blocks_v1_handle{ 0 }; - /** + /** * Maps block hash to state block. (Removed) * nano::block_hash -> nano::state_block */ - MDB_dbi state_blocks_handle{ 0 }; + MDB_dbi state_blocks_handle{ 0 }; - /** + /** * Maps min_version 0 (destination account, pending block) to (source account, amount). (Removed) * nano::account, nano::block_hash -> nano::account, nano::amount */ - MDB_dbi pending_v0_handle{ 0 }; + MDB_dbi pending_v0_handle{ 0 }; - /** + /** * Maps min_version 1 (destination account, pending block) to (source account, amount). (Removed) * nano::account, nano::block_hash -> nano::account, nano::amount */ - MDB_dbi pending_v1_handle{ 0 }; + MDB_dbi pending_v1_handle{ 0 }; - /** + /** * Maps (destination account, pending block) to (source account, amount, version). (Removed) * nano::account, nano::block_hash -> nano::account, nano::amount, nano::epoch */ - MDB_dbi pending_handle{ 0 }; + MDB_dbi pending_handle{ 0 }; - /** + /** * Representative weights. (Removed) * nano::account -> nano::uint128_t */ - MDB_dbi representation_handle{ 0 }; + MDB_dbi representation_handle{ 0 }; - /** + /** * Unchecked bootstrap blocks info. * nano::block_hash -> nano::unchecked_info */ - MDB_dbi unchecked_handle{ 0 }; + MDB_dbi unchecked_handle{ 0 }; - /** + /** * Samples of online vote weight * uint64_t -> nano::amount */ - MDB_dbi online_weight_handle{ 0 }; + MDB_dbi online_weight_handle{ 0 }; - /** + /** * Meta information about block store, such as versions. * nano::uint256_union (arbitrary key) -> blob */ - MDB_dbi meta_handle{ 0 }; + MDB_dbi meta_handle{ 0 }; - /** + /** * Pruned blocks hashes * nano::block_hash -> none */ - MDB_dbi pruned_handle{ 0 }; + MDB_dbi pruned_handle{ 0 }; - /* + /* * Endpoints for peers * nano::endpoint_key -> no_value */ - MDB_dbi peers_handle{ 0 }; + MDB_dbi peers_handle{ 0 }; - /* + /* * Confirmation height of an account, and the hash for the block at that height * nano::account -> uint64_t, nano::block_hash */ - MDB_dbi confirmation_height_handle{ 0 }; + MDB_dbi confirmation_height_handle{ 0 }; - /* + /* * Contains block_sideband and block for all block types (legacy send/change/open/receive & state blocks) * nano::block_hash -> nano::block_sideband, nano::block */ - MDB_dbi blocks_handle{ 0 }; + MDB_dbi blocks_handle{ 0 }; - /** + /** * Maps root to block hash for generated final votes. * nano::qualified_root -> nano::block_hash */ - MDB_dbi final_votes_handle{ 0 }; + MDB_dbi final_votes_handle{ 0 }; - bool exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const; + bool exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const; - int get (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val & value_a) const; - int put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val const & value_a) const; - int del (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const; + int get (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val & value_a) const; + int put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val const & value_a) const; + int del (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const; - bool copy_db (boost::filesystem::path const & destination_file) override; - void rebuild_db (nano::write_transaction const & transaction_a) override; + bool copy_db (boost::filesystem::path const & destination_file) override; + void rebuild_db (nano::write_transaction const & transaction_a) override; - template - nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, bool const direction_asc = true) const - { - return nano::store_iterator (std::make_unique> (transaction_a, table_to_dbi (table_a), nano::mdb_val{}, direction_asc)); - } - - template - nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key) const - { - return nano::store_iterator (std::make_unique> (transaction_a, table_to_dbi (table_a), key)); - } - - bool init_error () const override; - - uint64_t count (nano::transaction const &, MDB_dbi) const; - std::string error_string (int status) const override; - - // These are only use in the upgrade process. - std::shared_ptr block_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_sideband_v14 * sideband_a = nullptr, bool * is_state_v1 = nullptr) const; - std::size_t block_successor_offset_v14 (nano::transaction const & transaction_a, std::size_t entry_size_a, nano::block_type type_a) const; - nano::block_hash block_successor_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const; - nano::mdb_val block_raw_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1 = nullptr) const; - boost::optional block_raw_get_by_type_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1) const; - -private: - bool do_upgrades (nano::write_transaction &, bool &); - void upgrade_v14_to_v15 (nano::write_transaction &); - void upgrade_v15_to_v16 (nano::write_transaction const &); - void upgrade_v16_to_v17 (nano::write_transaction const &); - void upgrade_v17_to_v18 (nano::write_transaction const &); - void upgrade_v18_to_v19 (nano::write_transaction const &); - void upgrade_v19_to_v20 (nano::write_transaction const &); - void upgrade_v20_to_v21 (nano::write_transaction const &); - - std::shared_ptr block_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const; - nano::mdb_val block_raw_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const; - boost::optional block_raw_get_by_type_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const; - nano::uint128_t block_balance_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const; - - void open_databases (bool &, nano::transaction const &, unsigned); - - int drop (nano::write_transaction const & transaction_a, tables table_a) override; - int clear (nano::write_transaction const & transaction_a, MDB_dbi handle_a); - - bool not_found (int status) const override; - bool success (int status) const override; - void release_assert_success (int const status) const - { - if (!success (status)) + template + nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, bool const direction_asc = true) const { - release_assert (false, error_string (status)); + return nano::store_iterator (std::make_unique> (transaction_a, table_to_dbi (table_a), nano::mdb_val{}, direction_asc)); } - } - int status_code_not_found () const override; - MDB_dbi table_to_dbi (tables table_a) const; + template + nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key) const + { + return nano::store_iterator (std::make_unique> (transaction_a, table_to_dbi (table_a), key)); + } - mutable nano::mdb_txn_tracker mdb_txn_tracker; - nano::mdb_txn_callbacks create_txn_callbacks () const; - bool txn_tracking_enabled; + bool init_error () const override; - uint64_t count (nano::transaction const & transaction_a, tables table_a) const override; + uint64_t count (nano::transaction const &, MDB_dbi) const; + std::string error_string (int status) const override; - bool vacuum_after_upgrade (boost::filesystem::path const & path_a, nano::lmdb_config const & lmdb_config_a); + // These are only use in the upgrade process. + std::shared_ptr block_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_sideband_v14 * sideband_a = nullptr, bool * is_state_v1 = nullptr) const; + std::size_t block_successor_offset_v14 (nano::transaction const & transaction_a, std::size_t entry_size_a, nano::block_type type_a) const; + nano::block_hash block_successor_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const; + nano::mdb_val block_raw_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1 = nullptr) const; + boost::optional block_raw_get_by_type_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1) const; - class upgrade_counters - { - public: - upgrade_counters (uint64_t count_before_v0, uint64_t count_before_v1); - bool are_equal () const; + private: + bool do_upgrades (nano::write_transaction &, nano::ledger_constants & constants, bool &); + void upgrade_v14_to_v15 (nano::write_transaction &); + void upgrade_v15_to_v16 (nano::write_transaction const &); + void upgrade_v16_to_v17 (nano::write_transaction const &); + void upgrade_v17_to_v18 (nano::write_transaction const &, nano::ledger_constants & constants); + void upgrade_v18_to_v19 (nano::write_transaction const &); + void upgrade_v19_to_v20 (nano::write_transaction const &); + void upgrade_v20_to_v21 (nano::write_transaction const &); - uint64_t before_v0; - uint64_t before_v1; - uint64_t after_v0{ 0 }; - uint64_t after_v1{ 0 }; + std::shared_ptr block_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const; + nano::mdb_val block_raw_get_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const; + boost::optional block_raw_get_by_type_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a) const; + nano::uint128_t block_balance_v18 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const; + + void open_databases (bool &, nano::transaction const &, unsigned); + + int drop (nano::write_transaction const & transaction_a, tables table_a) override; + int clear (nano::write_transaction const & transaction_a, MDB_dbi handle_a); + + bool not_found (int status) const override; + bool success (int status) const override; + void release_assert_success (int const status) const + { + if (!success (status)) + { + release_assert (false, error_string (status)); + } + } + int status_code_not_found () const override; + + MDB_dbi table_to_dbi (tables table_a) const; + + mutable nano::mdb_txn_tracker mdb_txn_tracker; + nano::mdb_txn_callbacks create_txn_callbacks () const; + bool txn_tracking_enabled; + + uint64_t count (nano::transaction const & transaction_a, tables table_a) const override; + + bool vacuum_after_upgrade (boost::filesystem::path const & path_a, nano::lmdb_config const & lmdb_config_a); + + class upgrade_counters + { + public: + upgrade_counters (uint64_t count_before_v0, uint64_t count_before_v1); + bool are_equal () const; + + uint64_t before_v0; + uint64_t before_v1; + uint64_t after_v0{ 0 }; + uint64_t after_v1{ 0 }; + }; }; -}; +} template <> void * mdb_val::data () const; @@ -327,6 +328,4 @@ template <> mdb_val::db_val (std::size_t size_a, void * data_a); template <> void mdb_val::convert_buffer_to_value (); - -extern template class store_partial; } diff --git a/nano/node/lmdb/online_weight_store.cpp b/nano/node/lmdb/online_weight_store.cpp index b1409d49..17eaa81a 100644 --- a/nano/node/lmdb/online_weight_store.cpp +++ b/nano/node/lmdb/online_weight_store.cpp @@ -1,7 +1,7 @@ #include #include -nano::lmdb::online_weight_store::online_weight_store (nano::mdb_store & store_a) : +nano::lmdb::online_weight_store::online_weight_store (nano::lmdb::store & store_a) : store{ store_a } { } @@ -9,13 +9,13 @@ nano::lmdb::online_weight_store::online_weight_store (nano::mdb_store & store_a) void nano::lmdb::online_weight_store::put (nano::write_transaction const & transaction, uint64_t time, nano::amount const & amount) { auto status = store.put (transaction, tables::online_weight, time, amount); - release_assert_success (store, status); + store.release_assert_success (status); } void nano::lmdb::online_weight_store::del (nano::write_transaction const & transaction, uint64_t time) { auto status = store.del (transaction, tables::online_weight, time); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::lmdb::online_weight_store::begin (nano::transaction const & transaction) const @@ -41,5 +41,5 @@ size_t nano::lmdb::online_weight_store::count (nano::transaction const & transac void nano::lmdb::online_weight_store::clear (nano::write_transaction const & transaction) { auto status = store.drop (transaction, tables::online_weight); - release_assert_success (store, status); + store.release_assert_success (status); } diff --git a/nano/node/lmdb/online_weight_store.hpp b/nano/node/lmdb/online_weight_store.hpp index 0dc473be..ba463710 100644 --- a/nano/node/lmdb/online_weight_store.hpp +++ b/nano/node/lmdb/online_weight_store.hpp @@ -4,16 +4,15 @@ namespace nano { -class mdb_store; namespace lmdb { class online_weight_store : public nano::online_weight_store { private: - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit online_weight_store (nano::mdb_store & store_a); + explicit online_weight_store (nano::lmdb::store & store_a); void put (nano::write_transaction const & transaction_a, uint64_t time_a, nano::amount const & amount_a) override; void del (nano::write_transaction const & transaction_a, uint64_t time_a) override; nano::store_iterator begin (nano::transaction const & transaction_a) const override; diff --git a/nano/node/lmdb/peer_store.cpp b/nano/node/lmdb/peer_store.cpp index 976ff9ad..738bddee 100644 --- a/nano/node/lmdb/peer_store.cpp +++ b/nano/node/lmdb/peer_store.cpp @@ -1,19 +1,19 @@ #include #include -nano::lmdb::peer_store::peer_store (nano::mdb_store & store) : +nano::lmdb::peer_store::peer_store (nano::lmdb::store & store) : store{ store } {}; void nano::lmdb::peer_store::put (nano::write_transaction const & transaction, nano::endpoint_key const & endpoint) { - auto status = store.put_key (transaction, tables::peers, endpoint); - release_assert_success (store, status); + auto status = store.put (transaction, tables::peers, endpoint, nullptr); + store.release_assert_success (status); } void nano::lmdb::peer_store::del (nano::write_transaction const & transaction, nano::endpoint_key const & endpoint) { auto status = store.del (transaction, tables::peers, endpoint); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::lmdb::peer_store::exists (nano::transaction const & transaction, nano::endpoint_key const & endpoint) const @@ -29,7 +29,7 @@ size_t nano::lmdb::peer_store::count (nano::transaction const & transaction) con void nano::lmdb::peer_store::clear (nano::write_transaction const & transaction) { auto status = store.drop (transaction, tables::peers); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::lmdb::peer_store::begin (nano::transaction const & transaction) const diff --git a/nano/node/lmdb/peer_store.hpp b/nano/node/lmdb/peer_store.hpp index d160b592..164cfe65 100644 --- a/nano/node/lmdb/peer_store.hpp +++ b/nano/node/lmdb/peer_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class peer_store : public nano::peer_store { private: - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit peer_store (nano::mdb_store & store_a); + explicit peer_store (nano::lmdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override; void del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override; bool exists (nano::transaction const & transaction_a, nano::endpoint_key const & endpoint_a) const override; diff --git a/nano/node/lmdb/pending_store.cpp b/nano/node/lmdb/pending_store.cpp index f288dd2e..dc4e7769 100644 --- a/nano/node/lmdb/pending_store.cpp +++ b/nano/node/lmdb/pending_store.cpp @@ -1,19 +1,20 @@ #include #include +#include -nano::lmdb::pending_store::pending_store (nano::mdb_store & store) : +nano::lmdb::pending_store::pending_store (nano::lmdb::store & store) : store{ store } {}; void nano::lmdb::pending_store::put (nano::write_transaction const & transaction, nano::pending_key const & key, nano::pending_info const & pending) { auto status = store.put (transaction, tables::pending, key, pending); - release_assert_success (store, status); + store.release_assert_success (status); } void nano::lmdb::pending_store::del (nano::write_transaction const & transaction, nano::pending_key const & key) { auto status = store.del (transaction, tables::pending, key); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::lmdb::pending_store::get (nano::transaction const & transaction, nano::pending_key const & key, nano::pending_info & pending_a) diff --git a/nano/node/lmdb/pending_store.hpp b/nano/node/lmdb/pending_store.hpp index 51ef0ddf..e327354e 100644 --- a/nano/node/lmdb/pending_store.hpp +++ b/nano/node/lmdb/pending_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class pending_store : public nano::pending_store { private: - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit pending_store (nano::mdb_store & store_a); + explicit pending_store (nano::lmdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info const & pending_info_a) override; void del (nano::write_transaction const & transaction_a, nano::pending_key const & key_a) override; bool get (nano::transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info & pending_a) override; diff --git a/nano/node/lmdb/pruned_store.cpp b/nano/node/lmdb/pruned_store.cpp index 8e9f0eba..60f833ee 100644 --- a/nano/node/lmdb/pruned_store.cpp +++ b/nano/node/lmdb/pruned_store.cpp @@ -1,19 +1,20 @@ #include #include +#include -nano::lmdb::pruned_store::pruned_store (nano::mdb_store & store_a) : +nano::lmdb::pruned_store::pruned_store (nano::lmdb::store & store_a) : store{ store_a } {}; void nano::lmdb::pruned_store::put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) { - auto status = store.put_key (transaction_a, tables::pruned, hash_a); - release_assert_success (store, status); + auto status = store.put (transaction_a, tables::pruned, hash_a, nullptr); + store.release_assert_success (status); } void nano::lmdb::pruned_store::del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) { auto status = store.del (transaction_a, tables::pruned, hash_a); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::lmdb::pruned_store::exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const @@ -41,7 +42,7 @@ size_t nano::lmdb::pruned_store::count (nano::transaction const & transaction_a) void nano::lmdb::pruned_store::clear (nano::write_transaction const & transaction_a) { auto status = store.drop (transaction_a, tables::pruned); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::lmdb::pruned_store::begin (nano::transaction const & transaction, nano::block_hash const & hash) const diff --git a/nano/node/lmdb/pruned_store.hpp b/nano/node/lmdb/pruned_store.hpp index 44e79216..0c8e05ee 100644 --- a/nano/node/lmdb/pruned_store.hpp +++ b/nano/node/lmdb/pruned_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class pruned_store : public nano::pruned_store { private: - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit pruned_store (nano::mdb_store & store_a); + explicit pruned_store (nano::lmdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override; void del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override; bool exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override; diff --git a/nano/node/lmdb/unchecked_store.cpp b/nano/node/lmdb/unchecked_store.cpp index a7755a8c..8be96e38 100644 --- a/nano/node/lmdb/unchecked_store.cpp +++ b/nano/node/lmdb/unchecked_store.cpp @@ -1,19 +1,20 @@ #include #include +#include -nano::lmdb::unchecked_store::unchecked_store (nano::mdb_store & store_a) : +nano::lmdb::unchecked_store::unchecked_store (nano::lmdb::store & store_a) : store (store_a){}; void nano::lmdb::unchecked_store::clear (nano::write_transaction const & transaction_a) { auto status = store.drop (transaction_a, tables::unchecked); - release_assert_success (store, status); + store.release_assert_success (status); } void nano::lmdb::unchecked_store::put (nano::write_transaction const & transaction_a, nano::hash_or_account const & dependency, nano::unchecked_info const & info) { auto status = store.put (transaction_a, tables::unchecked, nano::unchecked_key{ dependency, info.block->hash () }, info); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::lmdb::unchecked_store::exists (nano::transaction const & transaction_a, nano::unchecked_key const & key) @@ -27,7 +28,7 @@ bool nano::lmdb::unchecked_store::exists (nano::transaction const & transaction_ void nano::lmdb::unchecked_store::del (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a) { auto status (store.del (transaction_a, tables::unchecked, key_a)); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::lmdb::unchecked_store::end () const diff --git a/nano/node/lmdb/unchecked_store.hpp b/nano/node/lmdb/unchecked_store.hpp index 3095c4af..62bc2182 100644 --- a/nano/node/lmdb/unchecked_store.hpp +++ b/nano/node/lmdb/unchecked_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class unchecked_store : public nano::unchecked_store { private: - nano::mdb_store & store; + nano::lmdb::store & store; public: - unchecked_store (nano::mdb_store & store_a); + unchecked_store (nano::lmdb::store & store_a); void clear (nano::write_transaction const & transaction_a) override; void put (nano::write_transaction const & transaction_a, nano::hash_or_account const & dependency, nano::unchecked_info const & info_a) override; diff --git a/nano/node/lmdb/version_store.cpp b/nano/node/lmdb/version_store.cpp index 039f2d57..deee22ef 100644 --- a/nano/node/lmdb/version_store.cpp +++ b/nano/node/lmdb/version_store.cpp @@ -1,7 +1,7 @@ #include #include -nano::lmdb::version_store::version_store (nano::mdb_store & store_a) : +nano::lmdb::version_store::version_store (nano::lmdb::store & store_a) : store{ store_a } {}; void nano::lmdb::version_store::put (nano::write_transaction const & transaction_a, int version) @@ -9,7 +9,7 @@ void nano::lmdb::version_store::put (nano::write_transaction const & transaction nano::uint256_union version_key{ 1 }; nano::uint256_union version_value (version); auto status = store.put (transaction_a, tables::meta, version_key, version_value); - release_assert_success (store, status); + store.release_assert_success (status); } int nano::lmdb::version_store::get (nano::transaction const & transaction_a) const @@ -17,7 +17,7 @@ int nano::lmdb::version_store::get (nano::transaction const & transaction_a) con nano::uint256_union version_key{ 1 }; nano::mdb_val data; auto status = store.get (transaction_a, tables::meta, version_key, data); - int result = store.minimum_version; + int result = store.version_minimum; if (store.success (status)) { nano::uint256_union version_value{ data }; diff --git a/nano/node/lmdb/version_store.hpp b/nano/node/lmdb/version_store.hpp index 83e3b95c..9f4a6909 100644 --- a/nano/node/lmdb/version_store.hpp +++ b/nano/node/lmdb/version_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class mdb_store; namespace lmdb { + class store; class version_store : public nano::version_store { protected: - nano::mdb_store & store; + nano::lmdb::store & store; public: - explicit version_store (nano::mdb_store & store_a); + explicit version_store (nano::lmdb::store & store_a); void put (nano::write_transaction const & transaction_a, int version_a) override; int get (nano::transaction const & transaction_a) const override; }; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index ea546207..edefe8e5 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -360,7 +360,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co { auto const transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::confirmation_height, tables::frontiers })); // Store was empty meaning we just created it, add the genesis block - store.initialize (transaction, ledger.cache); + store.initialize (transaction, ledger.cache, ledger.constants); } if (!ledger.block_or_pruned_exists (config.network_params.ledger.genesis->hash ())) @@ -1857,8 +1857,8 @@ std::unique_ptr nano::make_store (nano::logger_mt & logger, boost:: { if (rocksdb_config.enable) { - return std::make_unique (logger, add_db_postfix ? path / "rocksdb" : path, constants, rocksdb_config, read_only); + return std::make_unique (logger, add_db_postfix ? path / "rocksdb" : path, constants, rocksdb_config, read_only); } - return std::make_unique (logger, add_db_postfix ? path / "data.ldb" : path, constants, txn_tracking_config_a, block_processor_batch_max_time_a, lmdb_config_a, backup_before_upgrade); + return std::make_unique (logger, add_db_postfix ? path / "data.ldb" : path, constants, txn_tracking_config_a, block_processor_batch_max_time_a, lmdb_config_a, backup_before_upgrade); } diff --git a/nano/node/rocksdb/account_store.cpp b/nano/node/rocksdb/account_store.cpp index 2ec731a6..8cbb5b8a 100644 --- a/nano/node/rocksdb/account_store.cpp +++ b/nano/node/rocksdb/account_store.cpp @@ -1,13 +1,14 @@ #include #include +#include -nano::rocksdb::account_store::account_store (nano::rocksdb_store & store_a) : +nano::rocksdb::account_store::account_store (nano::rocksdb::store & store_a) : store (store_a){}; void nano::rocksdb::account_store::put (nano::write_transaction const & transaction, nano::account const & account, nano::account_info const & info) { auto status = store.put (transaction, tables::accounts, account, info); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::rocksdb::account_store::get (nano::transaction const & transaction, nano::account const & account, nano::account_info & info) @@ -27,7 +28,7 @@ bool nano::rocksdb::account_store::get (nano::transaction const & transaction, n void nano::rocksdb::account_store::del (nano::write_transaction const & transaction_a, nano::account const & account_a) { auto status = store.del (transaction_a, tables::accounts, account_a); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::rocksdb::account_store::exists (nano::transaction const & transaction_a, nano::account const & account_a) diff --git a/nano/node/rocksdb/account_store.hpp b/nano/node/rocksdb/account_store.hpp index ee1efe9f..b8ea1527 100644 --- a/nano/node/rocksdb/account_store.hpp +++ b/nano/node/rocksdb/account_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class account_store : public nano::account_store { private: - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit account_store (nano::rocksdb_store & store_a); + explicit account_store (nano::rocksdb::store & store_a); void put (nano::write_transaction const & transaction, nano::account const & account, nano::account_info const & info) override; bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::account_info & info_a) override; void del (nano::write_transaction const & transaction_a, nano::account const & account_a) override; diff --git a/nano/node/rocksdb/block_store.cpp b/nano/node/rocksdb/block_store.cpp index 2853aff0..518b6720 100644 --- a/nano/node/rocksdb/block_store.cpp +++ b/nano/node/rocksdb/block_store.cpp @@ -1,5 +1,6 @@ #include #include +#include namespace nano { @@ -22,7 +23,7 @@ public: }; } -nano::rocksdb::block_store::block_store (nano::rocksdb_store & store_a) : +nano::rocksdb::block_store::block_store (nano::rocksdb::store & store_a) : store{ store_a } {}; void nano::rocksdb::block_store::put (nano::write_transaction const & transaction, nano::block_hash const & hash, nano::block const & block) @@ -44,7 +45,7 @@ void nano::rocksdb::block_store::raw_put (nano::write_transaction const & transa { nano::rocksdb_val value{ data.size (), (void *)data.data () }; auto status = store.put (transaction_a, tables::blocks, hash_a, value); - release_assert_success (store, status); + store.release_assert_success (status); } nano::block_hash nano::rocksdb::block_store::successor (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const @@ -130,7 +131,7 @@ std::shared_ptr nano::rocksdb::block_store::random (nano::transacti void nano::rocksdb::block_store::del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) { auto status = store.del (transaction_a, tables::blocks, hash_a); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::rocksdb::block_store::exists (nano::transaction const & transaction, nano::block_hash const & hash) diff --git a/nano/node/rocksdb/block_store.hpp b/nano/node/rocksdb/block_store.hpp index 3b14000c..fc8b07c5 100644 --- a/nano/node/rocksdb/block_store.hpp +++ b/nano/node/rocksdb/block_store.hpp @@ -6,18 +6,18 @@ namespace nano { -class rocksdb_store; using rocksdb_val = db_val<::rocksdb::Slice>; class block_predecessor_rocksdb_set; namespace rocksdb { + class store; class block_store : public nano::block_store { friend class nano::block_predecessor_rocksdb_set; - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit block_store (nano::rocksdb_store & store_a); + explicit block_store (nano::rocksdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, nano::block const & block_a) override; void raw_put (nano::write_transaction const & transaction_a, std::vector const & data, nano::block_hash const & hash_a) override; nano::block_hash successor (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override; diff --git a/nano/node/rocksdb/confirmation_height_store.cpp b/nano/node/rocksdb/confirmation_height_store.cpp index 6a6979ba..8db8a699 100644 --- a/nano/node/rocksdb/confirmation_height_store.cpp +++ b/nano/node/rocksdb/confirmation_height_store.cpp @@ -1,7 +1,8 @@ #include #include +#include -nano::rocksdb::confirmation_height_store::confirmation_height_store (nano::rocksdb_store & store) : +nano::rocksdb::confirmation_height_store::confirmation_height_store (nano::rocksdb::store & store) : store{ store } { } @@ -9,7 +10,7 @@ nano::rocksdb::confirmation_height_store::confirmation_height_store (nano::rocks void nano::rocksdb::confirmation_height_store::put (nano::write_transaction const & transaction, nano::account const & account, nano::confirmation_height_info const & confirmation_height_info) { auto status = store.put (transaction, tables::confirmation_height, account, confirmation_height_info); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::rocksdb::confirmation_height_store::get (nano::transaction const & transaction, nano::account const & account, nano::confirmation_height_info & confirmation_height_info) @@ -40,7 +41,7 @@ bool nano::rocksdb::confirmation_height_store::exists (nano::transaction const & void nano::rocksdb::confirmation_height_store::del (nano::write_transaction const & transaction, nano::account const & account) { auto status = store.del (transaction, tables::confirmation_height, account); - release_assert_success (store, status); + store.release_assert_success (status); } uint64_t nano::rocksdb::confirmation_height_store::count (nano::transaction const & transaction) diff --git a/nano/node/rocksdb/confirmation_height_store.hpp b/nano/node/rocksdb/confirmation_height_store.hpp index 2bb8516e..c7787c1f 100644 --- a/nano/node/rocksdb/confirmation_height_store.hpp +++ b/nano/node/rocksdb/confirmation_height_store.hpp @@ -4,15 +4,15 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class confirmation_height_store : public nano::confirmation_height_store { - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit confirmation_height_store (nano::rocksdb_store & store_a); + explicit confirmation_height_store (nano::rocksdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info const & confirmation_height_info_a) override; bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info & confirmation_height_info_a) override; bool exists (nano::transaction const & transaction_a, nano::account const & account_a) const override; diff --git a/nano/node/rocksdb/final_vote_store.cpp b/nano/node/rocksdb/final_vote_store.cpp index 6053a243..6809425e 100644 --- a/nano/node/rocksdb/final_vote_store.cpp +++ b/nano/node/rocksdb/final_vote_store.cpp @@ -1,7 +1,8 @@ #include #include +#include -nano::rocksdb::final_vote_store::final_vote_store (nano::rocksdb_store & store) : +nano::rocksdb::final_vote_store::final_vote_store (nano::rocksdb::store & store) : store{ store } {}; bool nano::rocksdb::final_vote_store::put (nano::write_transaction const & transaction, nano::qualified_root const & root, nano::block_hash const & hash) @@ -17,7 +18,7 @@ bool nano::rocksdb::final_vote_store::put (nano::write_transaction const & trans else { status = store.put (transaction, tables::final_votes, root, hash); - release_assert_success (store, status); + store.release_assert_success (status); } return result; } @@ -44,7 +45,7 @@ void nano::rocksdb::final_vote_store::del (nano::write_transaction const & trans for (auto & final_vote_qualified_root : final_vote_qualified_roots) { auto status = store.del (transaction, tables::final_votes, final_vote_qualified_root); - release_assert_success (store, status); + store.release_assert_success (status); } } diff --git a/nano/node/rocksdb/final_vote_store.hpp b/nano/node/rocksdb/final_vote_store.hpp index 9dd195cb..71c7e315 100644 --- a/nano/node/rocksdb/final_vote_store.hpp +++ b/nano/node/rocksdb/final_vote_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class final_vote_store : public nano::final_vote_store { private: - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit final_vote_store (nano::rocksdb_store & store); + explicit final_vote_store (nano::rocksdb::store & store); bool put (nano::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) override; std::vector get (nano::transaction const & transaction_a, nano::root const & root_a) override; void del (nano::write_transaction const & transaction_a, nano::root const & root_a) override; diff --git a/nano/node/rocksdb/frontier_store.cpp b/nano/node/rocksdb/frontier_store.cpp index 31291347..ffc71290 100644 --- a/nano/node/rocksdb/frontier_store.cpp +++ b/nano/node/rocksdb/frontier_store.cpp @@ -1,7 +1,8 @@ #include #include +#include -nano::rocksdb::frontier_store::frontier_store (nano::rocksdb_store & store) : +nano::rocksdb::frontier_store::frontier_store (nano::rocksdb::store & store) : store{ store } { } @@ -9,7 +10,7 @@ nano::rocksdb::frontier_store::frontier_store (nano::rocksdb_store & store) : void nano::rocksdb::frontier_store::put (nano::write_transaction const & transaction, nano::block_hash const & block, nano::account const & account) { auto status = store.put (transaction, tables::frontiers, block, account); - release_assert_success (store, status); + store.release_assert_success (status); } nano::account nano::rocksdb::frontier_store::get (nano::transaction const & transaction, nano::block_hash const & hash) const @@ -28,7 +29,7 @@ nano::account nano::rocksdb::frontier_store::get (nano::transaction const & tran void nano::rocksdb::frontier_store::del (nano::write_transaction const & transaction, nano::block_hash const & hash) { auto status = store.del (transaction, tables::frontiers, hash); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::rocksdb::frontier_store::begin (nano::transaction const & transaction) const diff --git a/nano/node/rocksdb/frontier_store.hpp b/nano/node/rocksdb/frontier_store.hpp index f67cde47..5b3131d3 100644 --- a/nano/node/rocksdb/frontier_store.hpp +++ b/nano/node/rocksdb/frontier_store.hpp @@ -4,13 +4,13 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class frontier_store : public nano::frontier_store { public: - frontier_store (nano::rocksdb_store & store); + frontier_store (nano::rocksdb::store & store); void put (nano::write_transaction const &, nano::block_hash const &, nano::account const &) override; nano::account get (nano::transaction const &, nano::block_hash const &) const override; void del (nano::write_transaction const &, nano::block_hash const &) override; @@ -20,7 +20,7 @@ namespace rocksdb void for_each_par (std::function, nano::store_iterator)> const & action_a) const override; private: - nano::rocksdb_store & store; + nano::rocksdb::store & store; }; } } diff --git a/nano/node/rocksdb/online_weight_store.cpp b/nano/node/rocksdb/online_weight_store.cpp index 4de5b4d3..43d2b8b9 100644 --- a/nano/node/rocksdb/online_weight_store.cpp +++ b/nano/node/rocksdb/online_weight_store.cpp @@ -1,7 +1,7 @@ #include #include -nano::rocksdb::online_weight_store::online_weight_store (nano::rocksdb_store & store_a) : +nano::rocksdb::online_weight_store::online_weight_store (nano::rocksdb::store & store_a) : store{ store_a } { } @@ -9,13 +9,13 @@ nano::rocksdb::online_weight_store::online_weight_store (nano::rocksdb_store & s void nano::rocksdb::online_weight_store::put (nano::write_transaction const & transaction, uint64_t time, nano::amount const & amount) { auto status = store.put (transaction, tables::online_weight, time, amount); - release_assert_success (store, status); + store.release_assert_success (status); } void nano::rocksdb::online_weight_store::del (nano::write_transaction const & transaction, uint64_t time) { auto status = store.del (transaction, tables::online_weight, time); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::rocksdb::online_weight_store::begin (nano::transaction const & transaction) const @@ -41,5 +41,5 @@ size_t nano::rocksdb::online_weight_store::count (nano::transaction const & tran void nano::rocksdb::online_weight_store::clear (nano::write_transaction const & transaction) { auto status = store.drop (transaction, tables::online_weight); - release_assert_success (store, status); + store.release_assert_success (status); } diff --git a/nano/node/rocksdb/online_weight_store.hpp b/nano/node/rocksdb/online_weight_store.hpp index 3619cf4c..740518ee 100644 --- a/nano/node/rocksdb/online_weight_store.hpp +++ b/nano/node/rocksdb/online_weight_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class online_weight_store : public nano::online_weight_store { private: - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit online_weight_store (nano::rocksdb_store & store_a); + explicit online_weight_store (nano::rocksdb::store & store_a); void put (nano::write_transaction const & transaction_a, uint64_t time_a, nano::amount const & amount_a) override; void del (nano::write_transaction const & transaction_a, uint64_t time_a) override; nano::store_iterator begin (nano::transaction const & transaction_a) const override; diff --git a/nano/node/rocksdb/peer_store.cpp b/nano/node/rocksdb/peer_store.cpp index 01ac1883..fd31281f 100644 --- a/nano/node/rocksdb/peer_store.cpp +++ b/nano/node/rocksdb/peer_store.cpp @@ -1,19 +1,19 @@ #include #include -nano::rocksdb::peer_store::peer_store (nano::rocksdb_store & store) : +nano::rocksdb::peer_store::peer_store (nano::rocksdb::store & store) : store{ store } {}; void nano::rocksdb::peer_store::put (nano::write_transaction const & transaction, nano::endpoint_key const & endpoint) { - auto status = store.put_key (transaction, tables::peers, endpoint); - release_assert_success (store, status); + auto status = store.put (transaction, tables::peers, endpoint, nullptr); + store.release_assert_success (status); } void nano::rocksdb::peer_store::del (nano::write_transaction const & transaction, nano::endpoint_key const & endpoint) { auto status = store.del (transaction, tables::peers, endpoint); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::rocksdb::peer_store::exists (nano::transaction const & transaction, nano::endpoint_key const & endpoint) const @@ -29,7 +29,7 @@ size_t nano::rocksdb::peer_store::count (nano::transaction const & transaction) void nano::rocksdb::peer_store::clear (nano::write_transaction const & transaction) { auto status = store.drop (transaction, tables::peers); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::rocksdb::peer_store::begin (nano::transaction const & transaction) const diff --git a/nano/node/rocksdb/peer_store.hpp b/nano/node/rocksdb/peer_store.hpp index 839cc68a..9d35c3b8 100644 --- a/nano/node/rocksdb/peer_store.hpp +++ b/nano/node/rocksdb/peer_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class peer_store : public nano::peer_store { private: - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit peer_store (nano::rocksdb_store & store_a); + explicit peer_store (nano::rocksdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override; void del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override; bool exists (nano::transaction const & transaction_a, nano::endpoint_key const & endpoint_a) const override; diff --git a/nano/node/rocksdb/pending_store.cpp b/nano/node/rocksdb/pending_store.cpp index 4bda259e..b8f32358 100644 --- a/nano/node/rocksdb/pending_store.cpp +++ b/nano/node/rocksdb/pending_store.cpp @@ -1,19 +1,20 @@ #include #include +#include -nano::rocksdb::pending_store::pending_store (nano::rocksdb_store & store) : +nano::rocksdb::pending_store::pending_store (nano::rocksdb::store & store) : store{ store } {}; void nano::rocksdb::pending_store::put (nano::write_transaction const & transaction, nano::pending_key const & key, nano::pending_info const & pending) { auto status = store.put (transaction, tables::pending, key, pending); - release_assert_success (store, status); + store.release_assert_success (status); } void nano::rocksdb::pending_store::del (nano::write_transaction const & transaction, nano::pending_key const & key) { auto status = store.del (transaction, tables::pending, key); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::rocksdb::pending_store::get (nano::transaction const & transaction, nano::pending_key const & key, nano::pending_info & pending) diff --git a/nano/node/rocksdb/pending_store.hpp b/nano/node/rocksdb/pending_store.hpp index 9973ae79..8268fa35 100644 --- a/nano/node/rocksdb/pending_store.hpp +++ b/nano/node/rocksdb/pending_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class pending_store : public nano::pending_store { private: - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit pending_store (nano::rocksdb_store & store_a); + explicit pending_store (nano::rocksdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info const & pending_info_a) override; void del (nano::write_transaction const & transaction_a, nano::pending_key const & key_a) override; bool get (nano::transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info & pending_a) override; diff --git a/nano/node/rocksdb/pruned_store.cpp b/nano/node/rocksdb/pruned_store.cpp index 76cf4d03..b02423aa 100644 --- a/nano/node/rocksdb/pruned_store.cpp +++ b/nano/node/rocksdb/pruned_store.cpp @@ -1,19 +1,20 @@ #include #include +#include -nano::rocksdb::pruned_store::pruned_store (nano::rocksdb_store & store_a) : +nano::rocksdb::pruned_store::pruned_store (nano::rocksdb::store & store_a) : store{ store_a } {}; void nano::rocksdb::pruned_store::put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) { - auto status = store.put_key (transaction_a, tables::pruned, hash_a); - release_assert_success (store, status); + auto status = store.put (transaction_a, tables::pruned, hash_a, nullptr); + store.release_assert_success (status); } void nano::rocksdb::pruned_store::del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) { auto status = store.del (transaction_a, tables::pruned, hash_a); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::rocksdb::pruned_store::exists (nano::transaction const & transaction, nano::block_hash const & hash_a) const @@ -41,7 +42,7 @@ size_t nano::rocksdb::pruned_store::count (nano::transaction const & transaction void nano::rocksdb::pruned_store::clear (nano::write_transaction const & transaction_a) { auto status = store.drop (transaction_a, tables::pruned); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::rocksdb::pruned_store::begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const diff --git a/nano/node/rocksdb/pruned_store.hpp b/nano/node/rocksdb/pruned_store.hpp index a2c7841a..22e1f2e0 100644 --- a/nano/node/rocksdb/pruned_store.hpp +++ b/nano/node/rocksdb/pruned_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class pruned_store : public nano::pruned_store { private: - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit pruned_store (nano::rocksdb_store & store_a); + explicit pruned_store (nano::rocksdb::store & store_a); void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override; void del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override; bool exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override; diff --git a/nano/node/rocksdb/rocksdb.cpp b/nano/node/rocksdb/rocksdb.cpp index da482376..2a18a072 100644 --- a/nano/node/rocksdb/rocksdb.cpp +++ b/nano/node/rocksdb/rocksdb.cpp @@ -63,10 +63,9 @@ void rocksdb_val::convert_buffer_to_value () } } -nano::rocksdb_store::rocksdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::ledger_constants & constants, nano::rocksdb_config const & rocksdb_config_a, bool open_read_only_a) : +nano::rocksdb::store::store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::ledger_constants & constants, nano::rocksdb_config const & rocksdb_config_a, bool open_read_only_a) : // clang-format off - store_partial{ - constants, + nano::store{ block_store, frontier_store, account_store, @@ -114,7 +113,7 @@ nano::rocksdb_store::rocksdb_store (nano::logger_mt & logger_a, boost::filesyste } } -std::unordered_map nano::rocksdb_store::create_cf_name_table_map () const +std::unordered_map nano::rocksdb::store::create_cf_name_table_map () const { std::unordered_map map{ { ::rocksdb::kDefaultColumnFamilyName.c_str (), tables::default_unused }, { "frontiers", tables::frontiers }, @@ -134,7 +133,7 @@ std::unordered_map nano::rocksdb_store::create_cf_na return map; } -void nano::rocksdb_store::open (bool & error_a, boost::filesystem::path const & path_a, bool open_read_only_a) +void nano::rocksdb::store::open (bool & error_a, boost::filesystem::path const & path_a, bool open_read_only_a) { auto column_families = create_column_families (); auto options = get_db_options (); @@ -169,7 +168,7 @@ void nano::rocksdb_store::open (bool & error_a, boost::filesystem::path const & { auto transaction = tx_begin_read (); auto version_l = version.get (transaction); - if (version_l > version_number) + if (version_l > version_current) { error_a = true; logger.always_log (boost::str (boost::format ("The version of the ledger (%1%) is too high for this node") % version_l)); @@ -177,7 +176,7 @@ void nano::rocksdb_store::open (bool & error_a, boost::filesystem::path const & } } -void nano::rocksdb_store::generate_tombstone_map () +void nano::rocksdb::store::generate_tombstone_map () { tombstone_map.emplace (std::piecewise_construct, std::forward_as_tuple (nano::tables::unchecked), std::forward_as_tuple (0, 50000)); tombstone_map.emplace (std::piecewise_construct, std::forward_as_tuple (nano::tables::blocks), std::forward_as_tuple (0, 25000)); @@ -185,7 +184,7 @@ void nano::rocksdb_store::generate_tombstone_map () tombstone_map.emplace (std::piecewise_construct, std::forward_as_tuple (nano::tables::pending), std::forward_as_tuple (0, 25000)); } -rocksdb::ColumnFamilyOptions nano::rocksdb_store::get_common_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a, unsigned long long memtable_size_bytes_a) const +rocksdb::ColumnFamilyOptions nano::rocksdb::store::get_common_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a, unsigned long long memtable_size_bytes_a) const { ::rocksdb::ColumnFamilyOptions cf_options; cf_options.table_factory = table_factory_a; @@ -217,7 +216,7 @@ rocksdb::ColumnFamilyOptions nano::rocksdb_store::get_common_cf_options (std::sh return cf_options; } -rocksdb::ColumnFamilyOptions nano::rocksdb_store::get_cf_options (std::string const & cf_name_a) const +rocksdb::ColumnFamilyOptions nano::rocksdb::store::get_cf_options (std::string const & cf_name_a) const { ::rocksdb::ColumnFamilyOptions cf_options; auto const memtable_size_bytes = base_memtable_size_bytes (); @@ -311,7 +310,7 @@ rocksdb::ColumnFamilyOptions nano::rocksdb_store::get_cf_options (std::string co return cf_options; } -std::vector nano::rocksdb_store::create_column_families () +std::vector nano::rocksdb::store::create_column_families () { std::vector<::rocksdb::ColumnFamilyDescriptor> column_families; for (auto & [cf_name, table] : cf_name_table_map) @@ -322,7 +321,7 @@ std::vector nano::rocksdb_store::create_column_ return column_families; } -nano::write_transaction nano::rocksdb_store::tx_begin_write (std::vector const & tables_requiring_locks_a, std::vector const & tables_no_locks_a) +nano::write_transaction nano::rocksdb::store::tx_begin_write (std::vector const & tables_requiring_locks_a, std::vector const & tables_no_locks_a) { std::unique_ptr txn; release_assert (optimistic_db != nullptr); @@ -342,17 +341,17 @@ nano::write_transaction nano::rocksdb_store::tx_begin_write (std::vector (db.get ()) }; } -std::string nano::rocksdb_store::vendor_get () const +std::string nano::rocksdb::store::vendor_get () const { return boost::str (boost::format ("RocksDB %1%.%2%.%3%") % ROCKSDB_MAJOR % ROCKSDB_MINOR % ROCKSDB_PATCH); } -rocksdb::ColumnFamilyHandle * nano::rocksdb_store::table_to_column_family (tables table_a) const +rocksdb::ColumnFamilyHandle * nano::rocksdb::store::table_to_column_family (tables table_a) const { auto & handles_l = handles; auto get_handle = [&handles_l] (char const * name) { @@ -395,7 +394,7 @@ rocksdb::ColumnFamilyHandle * nano::rocksdb_store::table_to_column_family (table } } -bool nano::rocksdb_store::exists (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a) const +bool nano::rocksdb::store::exists (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a) const { ::rocksdb::PinnableSlice slice; ::rocksdb::Status status; @@ -413,7 +412,7 @@ bool nano::rocksdb_store::exists (nano::transaction const & transaction_a, table return (status.ok ()); } -int nano::rocksdb_store::del (nano::write_transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a) +int nano::rocksdb::store::del (nano::write_transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a) { debug_assert (transaction_a.contains (table_a)); // RocksDB does not report not_found status, it is a pre-condition that the key exists @@ -422,7 +421,7 @@ int nano::rocksdb_store::del (nano::write_transaction const & transaction_a, tab return tx (transaction_a)->Delete (table_to_column_family (table_a), key_a).code (); } -void nano::rocksdb_store::flush_tombstones_check (tables table_a) +void nano::rocksdb::store::flush_tombstones_check (tables table_a) { // Update the number of deletes for some tables, and force a flush if there are too many tombstones // as it can affect read performance. @@ -437,18 +436,18 @@ void nano::rocksdb_store::flush_tombstones_check (tables table_a) } } -void nano::rocksdb_store::flush_table (nano::tables table_a) +void nano::rocksdb::store::flush_table (nano::tables table_a) { db->Flush (::rocksdb::FlushOptions{}, table_to_column_family (table_a)); } -rocksdb::Transaction * nano::rocksdb_store::tx (nano::transaction const & transaction_a) const +rocksdb::Transaction * nano::rocksdb::store::tx (nano::transaction const & transaction_a) const { debug_assert (!is_read (transaction_a)); return static_cast<::rocksdb::Transaction *> (transaction_a.get_handle ()); } -int nano::rocksdb_store::get (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val & value_a) const +int nano::rocksdb::store::get (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val & value_a) const { ::rocksdb::ReadOptions options; ::rocksdb::PinnableSlice slice; @@ -472,29 +471,29 @@ int nano::rocksdb_store::get (nano::transaction const & transaction_a, tables ta return status.code (); } -int nano::rocksdb_store::put (nano::write_transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val const & value_a) +int nano::rocksdb::store::put (nano::write_transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val const & value_a) { debug_assert (transaction_a.contains (table_a)); auto txn = tx (transaction_a); return txn->Put (table_to_column_family (table_a), key_a, value_a).code (); } -bool nano::rocksdb_store::not_found (int status) const +bool nano::rocksdb::store::not_found (int status) const { return (status_code_not_found () == status); } -bool nano::rocksdb_store::success (int status) const +bool nano::rocksdb::store::success (int status) const { return (static_cast (::rocksdb::Status::Code::kOk) == status); } -int nano::rocksdb_store::status_code_not_found () const +int nano::rocksdb::store::status_code_not_found () const { return static_cast (::rocksdb::Status::Code::kNotFound); } -uint64_t nano::rocksdb_store::count (nano::transaction const & transaction_a, tables table_a) const +uint64_t nano::rocksdb::store::count (nano::transaction const & transaction_a, tables table_a) const { uint64_t sum = 0; // Peers/online weight are small enough that they can just be iterated to get accurate counts. @@ -560,7 +559,7 @@ uint64_t nano::rocksdb_store::count (nano::transaction const & transaction_a, ta return sum; } -int nano::rocksdb_store::drop (nano::write_transaction const & transaction_a, tables table_a) +int nano::rocksdb::store::drop (nano::write_transaction const & transaction_a, tables table_a) { debug_assert (transaction_a.contains (table_a)); auto col = table_to_column_family (table_a); @@ -587,7 +586,7 @@ int nano::rocksdb_store::drop (nano::write_transaction const & transaction_a, ta return status; } -int nano::rocksdb_store::clear (::rocksdb::ColumnFamilyHandle * column_family) +int nano::rocksdb::store::clear (::rocksdb::ColumnFamilyHandle * column_family) { // Dropping completely removes the column auto name = column_family->GetName (); @@ -605,7 +604,7 @@ int nano::rocksdb_store::clear (::rocksdb::ColumnFamilyHandle * column_family) return status.code (); } -void nano::rocksdb_store::construct_column_family_mutexes () +void nano::rocksdb::store::construct_column_family_mutexes () { for (auto table : all_tables ()) { @@ -613,7 +612,7 @@ void nano::rocksdb_store::construct_column_family_mutexes () } } -rocksdb::Options nano::rocksdb_store::get_db_options () +rocksdb::Options nano::rocksdb::store::get_db_options () { ::rocksdb::Options db_options; db_options.create_if_missing = true; @@ -652,7 +651,7 @@ rocksdb::Options nano::rocksdb_store::get_db_options () return db_options; } -rocksdb::BlockBasedTableOptions nano::rocksdb_store::get_active_table_options (std::size_t lru_size) const +rocksdb::BlockBasedTableOptions nano::rocksdb::store::get_active_table_options (std::size_t lru_size) const { ::rocksdb::BlockBasedTableOptions table_options; @@ -681,7 +680,7 @@ rocksdb::BlockBasedTableOptions nano::rocksdb_store::get_active_table_options (s return table_options; } -rocksdb::BlockBasedTableOptions nano::rocksdb_store::get_small_table_options () const +rocksdb::BlockBasedTableOptions nano::rocksdb::store::get_small_table_options () const { ::rocksdb::BlockBasedTableOptions table_options; // Improve point lookup performance be using the data block hash index (uses about 5% more space). @@ -691,7 +690,7 @@ rocksdb::BlockBasedTableOptions nano::rocksdb_store::get_small_table_options () return table_options; } -rocksdb::ColumnFamilyOptions nano::rocksdb_store::get_small_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a) const +rocksdb::ColumnFamilyOptions nano::rocksdb::store::get_small_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a) const { auto const memtable_size_bytes = 10000; auto cf_options = get_common_cf_options (table_factory_a, memtable_size_bytes); @@ -705,7 +704,7 @@ rocksdb::ColumnFamilyOptions nano::rocksdb_store::get_small_cf_options (std::sha return cf_options; } -::rocksdb::ColumnFamilyOptions nano::rocksdb_store::get_active_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a, unsigned long long memtable_size_bytes_a) const +::rocksdb::ColumnFamilyOptions nano::rocksdb::store::get_active_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a, unsigned long long memtable_size_bytes_a) const { auto cf_options = get_common_cf_options (table_factory_a, memtable_size_bytes_a); @@ -721,7 +720,7 @@ rocksdb::ColumnFamilyOptions nano::rocksdb_store::get_small_cf_options (std::sha return cf_options; } -void nano::rocksdb_store::on_flush (::rocksdb::FlushJobInfo const & flush_job_info_a) +void nano::rocksdb::store::on_flush (::rocksdb::FlushJobInfo const & flush_job_info_a) { // Reset appropriate tombstone counters if (auto it = tombstone_map.find (cf_name_table_map[flush_job_info_a.cf_name.c_str ()]); it != tombstone_map.end ()) @@ -730,12 +729,12 @@ void nano::rocksdb_store::on_flush (::rocksdb::FlushJobInfo const & flush_job_in } } -std::vector nano::rocksdb_store::all_tables () const +std::vector nano::rocksdb::store::all_tables () const { return std::vector{ tables::accounts, tables::blocks, tables::confirmation_height, tables::final_votes, tables::frontiers, tables::meta, tables::online_weight, tables::peers, tables::pending, tables::pruned, tables::unchecked, tables::vote }; } -bool nano::rocksdb_store::copy_db (boost::filesystem::path const & destination_path) +bool nano::rocksdb::store::copy_db (boost::filesystem::path const & destination_path) { std::unique_ptr<::rocksdb::BackupEngine> backup_engine; { @@ -799,23 +798,23 @@ bool nano::rocksdb_store::copy_db (boost::filesystem::path const & destination_p // Open it so that it flushes all WAL files if (status.ok ()) { - nano::rocksdb_store rocksdb_store (logger, destination_path.string (), constants, rocksdb_config, false); + nano::rocksdb::store rocksdb_store{ logger, destination_path.string (), constants, rocksdb_config, false }; return !rocksdb_store.init_error (); } return false; } -void nano::rocksdb_store::rebuild_db (nano::write_transaction const & transaction_a) +void nano::rocksdb::store::rebuild_db (nano::write_transaction const & transaction_a) { // Not available for RocksDB } -bool nano::rocksdb_store::init_error () const +bool nano::rocksdb::store::init_error () const { return error; } -void nano::rocksdb_store::serialize_memory_stats (boost::property_tree::ptree & json) +void nano::rocksdb::store::serialize_memory_stats (boost::property_tree::ptree & json) { uint64_t val; @@ -862,32 +861,29 @@ void nano::rocksdb_store::serialize_memory_stats (boost::property_tree::ptree & json.put ("block-cache-usage", val); } -unsigned long long nano::rocksdb_store::blocks_memtable_size_bytes () const +unsigned long long nano::rocksdb::store::blocks_memtable_size_bytes () const { return base_memtable_size_bytes (); } -unsigned long long nano::rocksdb_store::base_memtable_size_bytes () const +unsigned long long nano::rocksdb::store::base_memtable_size_bytes () const { return 1024ULL * 1024 * rocksdb_config.memory_multiplier * base_memtable_size; } // This is a ratio of the blocks memtable size to keep total write transaction commit size down. -unsigned nano::rocksdb_store::max_block_write_batch_num () const +unsigned nano::rocksdb::store::max_block_write_batch_num () const { return max_block_write_batch_num_m; } -std::string nano::rocksdb_store::error_string (int status) const +std::string nano::rocksdb::store::error_string (int status) const { return std::to_string (status); } -nano::rocksdb_store::tombstone_info::tombstone_info (uint64_t num_since_last_flush_a, uint64_t const max_a) : +nano::rocksdb::store::tombstone_info::tombstone_info (uint64_t num_since_last_flush_a, uint64_t const max_a) : num_since_last_flush (num_since_last_flush_a), max (max_a) { } - -// Explicitly instantiate -template class nano::store_partial; diff --git a/nano/node/rocksdb/rocksdb.hpp b/nano/node/rocksdb/rocksdb.hpp index fadda036..34bdaf79 100644 --- a/nano/node/rocksdb/rocksdb.hpp +++ b/nano/node/rocksdb/rocksdb.hpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include @@ -30,137 +29,145 @@ namespace nano { class logging_mt; class rocksdb_config; -class rocksdb_store; +class rocksdb_block_store_tombstone_count_Test; -/** +namespace rocksdb +{ + /** * rocksdb implementation of the block store */ -class rocksdb_store : public store_partial<::rocksdb::Slice, rocksdb_store> -{ -private: - nano::rocksdb::account_store account_store; - nano::rocksdb::block_store block_store; - nano::rocksdb::confirmation_height_store confirmation_height_store; - nano::rocksdb::final_vote_store final_vote_store; - nano::rocksdb::frontier_store frontier_store; - nano::rocksdb::online_weight_store online_weight_store; - nano::rocksdb::peer_store peer_store; - nano::rocksdb::pending_store pending_store; - nano::rocksdb::pruned_store pruned_store; - nano::rocksdb::unchecked_store unchecked_store; - nano::rocksdb::version_store version_store; - -public: - friend class nano::rocksdb::account_store; - friend class nano::rocksdb::block_store; - friend class nano::rocksdb::confirmation_height_store; - friend class nano::rocksdb::final_vote_store; - friend class nano::rocksdb::frontier_store; - friend class nano::rocksdb::online_weight_store; - friend class nano::rocksdb::peer_store; - friend class nano::rocksdb::pending_store; - friend class nano::rocksdb::pruned_store; - friend class nano::rocksdb::unchecked_store; - friend class nano::rocksdb::version_store; - - explicit rocksdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::ledger_constants & constants, nano::rocksdb_config const & = nano::rocksdb_config{}, bool open_read_only = false); - - nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; - nano::read_transaction tx_begin_read () const override; - - std::string vendor_get () const override; - - uint64_t count (nano::transaction const & transaction_a, tables table_a) const override; - - bool exists (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a) const; - int get (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val & value_a) const; - int put (nano::write_transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val const & value_a); - int del (nano::write_transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a); - - void serialize_memory_stats (boost::property_tree::ptree &) override; - - bool copy_db (boost::filesystem::path const & destination) override; - void rebuild_db (nano::write_transaction const & transaction_a) override; - - unsigned max_block_write_batch_num () const override; - - template - nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, bool const direction_asc = true) const + class store : public nano::store { - return nano::store_iterator (std::make_unique> (db.get (), transaction_a, table_to_column_family (table_a), nullptr, direction_asc)); - } + private: + nano::rocksdb::account_store account_store; + nano::rocksdb::block_store block_store; + nano::rocksdb::confirmation_height_store confirmation_height_store; + nano::rocksdb::final_vote_store final_vote_store; + nano::rocksdb::frontier_store frontier_store; + nano::rocksdb::online_weight_store online_weight_store; + nano::rocksdb::peer_store peer_store; + nano::rocksdb::pending_store pending_store; + nano::rocksdb::pruned_store pruned_store; + nano::rocksdb::unchecked_store unchecked_store; + nano::rocksdb::version_store version_store; - template - nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key) const - { - return nano::store_iterator (std::make_unique> (db.get (), transaction_a, table_to_column_family (table_a), &key, true)); - } - - bool init_error () const override; - - std::string error_string (int status) const override; - -private: - bool error{ false }; - nano::logger_mt & logger; - nano::ledger_constants & constants; - // Optimistic transactions are used in write mode - ::rocksdb::OptimisticTransactionDB * optimistic_db = nullptr; - std::unique_ptr<::rocksdb::DB> db; - std::vector> handles; - std::shared_ptr<::rocksdb::TableFactory> small_table_factory; - std::unordered_map write_lock_mutexes; - nano::rocksdb_config rocksdb_config; - unsigned const max_block_write_batch_num_m; - - class tombstone_info - { public: - tombstone_info (uint64_t, uint64_t const); - std::atomic num_since_last_flush; - uint64_t const max; + friend class nano::rocksdb::account_store; + friend class nano::rocksdb::block_store; + friend class nano::rocksdb::confirmation_height_store; + friend class nano::rocksdb::final_vote_store; + friend class nano::rocksdb::frontier_store; + friend class nano::rocksdb::online_weight_store; + friend class nano::rocksdb::peer_store; + friend class nano::rocksdb::pending_store; + friend class nano::rocksdb::pruned_store; + friend class nano::rocksdb::unchecked_store; + friend class nano::rocksdb::version_store; + + explicit store (nano::logger_mt &, boost::filesystem::path const &, nano::ledger_constants & constants, nano::rocksdb_config const & = nano::rocksdb_config{}, bool open_read_only = false); + + nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; + nano::read_transaction tx_begin_read () const override; + + std::string vendor_get () const override; + + uint64_t count (nano::transaction const & transaction_a, tables table_a) const override; + + bool exists (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a) const; + int get (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val & value_a) const; + int put (nano::write_transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val const & value_a); + int del (nano::write_transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a); + + void serialize_memory_stats (boost::property_tree::ptree &) override; + + bool copy_db (boost::filesystem::path const & destination) override; + void rebuild_db (nano::write_transaction const & transaction_a) override; + + unsigned max_block_write_batch_num () const override; + + template + nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, bool const direction_asc = true) const + { + return nano::store_iterator (std::make_unique> (db.get (), transaction_a, table_to_column_family (table_a), nullptr, direction_asc)); + } + + template + nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key) const + { + return nano::store_iterator (std::make_unique> (db.get (), transaction_a, table_to_column_family (table_a), &key, true)); + } + + bool init_error () const override; + + std::string error_string (int status) const override; + + private: + bool error{ false }; + nano::logger_mt & logger; + nano::ledger_constants & constants; + // Optimistic transactions are used in write mode + ::rocksdb::OptimisticTransactionDB * optimistic_db = nullptr; + std::unique_ptr<::rocksdb::DB> db; + std::vector> handles; + std::shared_ptr<::rocksdb::TableFactory> small_table_factory; + std::unordered_map write_lock_mutexes; + nano::rocksdb_config rocksdb_config; + unsigned const max_block_write_batch_num_m; + + class tombstone_info + { + public: + tombstone_info (uint64_t, uint64_t const); + std::atomic num_since_last_flush; + uint64_t const max; + }; + + std::unordered_map tombstone_map; + std::unordered_map cf_name_table_map; + + ::rocksdb::Transaction * tx (nano::transaction const & transaction_a) const; + std::vector all_tables () const; + + bool not_found (int status) const override; + bool success (int status) const override; + void release_assert_success (int const status) const + { + if (!success (status)) + { + release_assert (false, error_string (status)); + } + } + int status_code_not_found () const override; + int drop (nano::write_transaction const &, tables) override; + + ::rocksdb::ColumnFamilyHandle * table_to_column_family (tables table_a) const; + int clear (::rocksdb::ColumnFamilyHandle * column_family); + + void open (bool & error_a, boost::filesystem::path const & path_a, bool open_read_only_a); + + void construct_column_family_mutexes (); + ::rocksdb::Options get_db_options (); + ::rocksdb::ColumnFamilyOptions get_common_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a, unsigned long long memtable_size_bytes_a) const; + ::rocksdb::ColumnFamilyOptions get_active_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a, unsigned long long memtable_size_bytes_a) const; + ::rocksdb::ColumnFamilyOptions get_small_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a) const; + ::rocksdb::BlockBasedTableOptions get_active_table_options (std::size_t lru_size) const; + ::rocksdb::BlockBasedTableOptions get_small_table_options () const; + ::rocksdb::ColumnFamilyOptions get_cf_options (std::string const & cf_name_a) const; + + void on_flush (::rocksdb::FlushJobInfo const &); + void flush_table (nano::tables table_a); + void flush_tombstones_check (nano::tables table_a); + void generate_tombstone_map (); + std::unordered_map create_cf_name_table_map () const; + + std::vector<::rocksdb::ColumnFamilyDescriptor> create_column_families (); + unsigned long long base_memtable_size_bytes () const; + unsigned long long blocks_memtable_size_bytes () const; + + constexpr static int base_memtable_size = 16; + constexpr static int base_block_cache_size = 8; + + friend class nano::rocksdb_block_store_tombstone_count_Test; }; - - std::unordered_map tombstone_map; - std::unordered_map cf_name_table_map; - - ::rocksdb::Transaction * tx (nano::transaction const & transaction_a) const; - std::vector all_tables () const; - - bool not_found (int status) const override; - bool success (int status) const override; - int status_code_not_found () const override; - int drop (nano::write_transaction const &, tables) override; - - ::rocksdb::ColumnFamilyHandle * table_to_column_family (tables table_a) const; - int clear (::rocksdb::ColumnFamilyHandle * column_family); - - void open (bool & error_a, boost::filesystem::path const & path_a, bool open_read_only_a); - - void construct_column_family_mutexes (); - ::rocksdb::Options get_db_options (); - ::rocksdb::ColumnFamilyOptions get_common_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a, unsigned long long memtable_size_bytes_a) const; - ::rocksdb::ColumnFamilyOptions get_active_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a, unsigned long long memtable_size_bytes_a) const; - ::rocksdb::ColumnFamilyOptions get_small_cf_options (std::shared_ptr<::rocksdb::TableFactory> const & table_factory_a) const; - ::rocksdb::BlockBasedTableOptions get_active_table_options (std::size_t lru_size) const; - ::rocksdb::BlockBasedTableOptions get_small_table_options () const; - ::rocksdb::ColumnFamilyOptions get_cf_options (std::string const & cf_name_a) const; - - void on_flush (::rocksdb::FlushJobInfo const &); - void flush_table (nano::tables table_a); - void flush_tombstones_check (nano::tables table_a); - void generate_tombstone_map (); - std::unordered_map create_cf_name_table_map () const; - - std::vector<::rocksdb::ColumnFamilyDescriptor> create_column_families (); - unsigned long long base_memtable_size_bytes () const; - unsigned long long blocks_memtable_size_bytes () const; - - constexpr static int base_memtable_size = 16; - constexpr static int base_block_cache_size = 8; - - friend class rocksdb_block_store_tombstone_count_Test; -}; - -extern template class store_partial<::rocksdb::Slice, rocksdb_store>; -} +} // namespace rocksdb +} // namespace nano diff --git a/nano/node/rocksdb/unchecked_store.cpp b/nano/node/rocksdb/unchecked_store.cpp index dfa299c4..f8843352 100644 --- a/nano/node/rocksdb/unchecked_store.cpp +++ b/nano/node/rocksdb/unchecked_store.cpp @@ -1,19 +1,20 @@ #include #include +#include -nano::rocksdb::unchecked_store::unchecked_store (nano::rocksdb_store & store_a) : +nano::rocksdb::unchecked_store::unchecked_store (nano::rocksdb::store & store_a) : store (store_a){}; void nano::rocksdb::unchecked_store::clear (nano::write_transaction const & transaction_a) { auto status = store.drop (transaction_a, tables::unchecked); - release_assert_success (store, status); + store.release_assert_success (status); } void nano::rocksdb::unchecked_store::put (nano::write_transaction const & transaction_a, nano::hash_or_account const & dependency, nano::unchecked_info const & info) { auto status = store.put (transaction_a, tables::unchecked, nano::unchecked_key{ dependency, info.block->hash () }, info); - release_assert_success (store, status); + store.release_assert_success (status); } bool nano::rocksdb::unchecked_store::exists (nano::transaction const & transaction_a, nano::unchecked_key const & key) @@ -27,7 +28,7 @@ bool nano::rocksdb::unchecked_store::exists (nano::transaction const & transacti void nano::rocksdb::unchecked_store::del (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a) { auto status (store.del (transaction_a, tables::unchecked, key_a)); - release_assert_success (store, status); + store.release_assert_success (status); } nano::store_iterator nano::rocksdb::unchecked_store::end () const diff --git a/nano/node/rocksdb/unchecked_store.hpp b/nano/node/rocksdb/unchecked_store.hpp index 0710f036..7a75b796 100644 --- a/nano/node/rocksdb/unchecked_store.hpp +++ b/nano/node/rocksdb/unchecked_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class mdb_store; namespace rocksdb { + class store; class unchecked_store : public nano::unchecked_store { private: - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - unchecked_store (nano::rocksdb_store & store_a); + unchecked_store (nano::rocksdb::store & store_a); void clear (nano::write_transaction const & transaction_a) override; void put (nano::write_transaction const & transaction_a, nano::hash_or_account const & dependency, nano::unchecked_info const & info_a) override; diff --git a/nano/node/rocksdb/version_store.cpp b/nano/node/rocksdb/version_store.cpp index 2a7bb8ce..04ea7c00 100644 --- a/nano/node/rocksdb/version_store.cpp +++ b/nano/node/rocksdb/version_store.cpp @@ -1,7 +1,7 @@ #include #include -nano::rocksdb::version_store::version_store (nano::rocksdb_store & store_a) : +nano::rocksdb::version_store::version_store (nano::rocksdb::store & store_a) : store{ store_a } {}; void nano::rocksdb::version_store::put (nano::write_transaction const & transaction_a, int version) @@ -9,7 +9,7 @@ void nano::rocksdb::version_store::put (nano::write_transaction const & transact nano::uint256_union version_key{ 1 }; nano::uint256_union version_value (version); auto status = store.put (transaction_a, tables::meta, version_key, version_value); - release_assert_success (store, status); + store.release_assert_success (status); } int nano::rocksdb::version_store::get (nano::transaction const & transaction_a) const @@ -17,7 +17,7 @@ int nano::rocksdb::version_store::get (nano::transaction const & transaction_a) nano::uint256_union version_key{ 1 }; nano::rocksdb_val data; auto status = store.get (transaction_a, tables::meta, version_key, data); - int result = store.minimum_version; + int result = store.version_minimum; if (store.success (status)) { nano::uint256_union version_value{ data }; diff --git a/nano/node/rocksdb/version_store.hpp b/nano/node/rocksdb/version_store.hpp index ff8d2f13..acf252ca 100644 --- a/nano/node/rocksdb/version_store.hpp +++ b/nano/node/rocksdb/version_store.hpp @@ -4,16 +4,16 @@ namespace nano { -class rocksdb_store; namespace rocksdb { + class store; class version_store : public nano::version_store { protected: - nano::rocksdb_store & store; + nano::rocksdb::store & store; public: - explicit version_store (nano::rocksdb_store & store_a); + explicit version_store (nano::rocksdb::store & store_a); void put (nano::write_transaction const & transaction_a, int version_a) override; int get (nano::transaction const & transaction_a) const override; }; diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index c18e040b..8180a03e 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1390,7 +1390,7 @@ nano::wallets::wallets (bool error_a, nano::node & node_a) : char const * store_path; mdb_env_get_path (env, &store_path); boost::filesystem::path const path (store_path); - nano::mdb_store::create_backup_file (env, path, node_a.logger); + nano::lmdb::store::create_backup_file (env, path, node_a.logger); } for (auto & item : items) { @@ -1700,7 +1700,7 @@ void nano::wallets::ongoing_compute_reps () void nano::wallets::split_if_needed (nano::transaction & transaction_destination, nano::store & store_a) { - auto store_l (dynamic_cast (&store_a)); + auto store_l = dynamic_cast (&store_a); if (store_l != nullptr) { if (items.empty ()) diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 5819958a..3e4b84c8 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -521,7 +521,7 @@ TEST (history, short_text) nano::ledger ledger (*store, system.nodes[0]->stats, nano::dev::constants); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::keypair key; auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); nano::send_block send (latest, nano::dev::genesis_key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); @@ -561,7 +561,7 @@ TEST (history, pruned_source) // Basic pruning for legacy blocks. Previous block is pruned, source is pruned { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, nano::dev::constants); auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index bd6f02f6..57937d33 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -41,7 +41,6 @@ add_library( ${CMAKE_BINARY_DIR}/bootstrap_weights_beta.cpp store.hpp store.cpp - store_partial.hpp buffer.hpp common.hpp common.cpp diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index b4ab456e..4eda74d0 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -901,6 +901,11 @@ bool nano::ledger::block_or_pruned_exists (nano::transaction const & transaction return store.block.exists (transaction_a, hash_a); } +bool nano::ledger::root_exists (nano::transaction const & transaction_a, nano::root const & root_a) +{ + return store.block.exists (transaction_a, root_a.as_block_hash ()) || store.account.exists (transaction_a, root_a.as_account ()); +} + std::string nano::ledger::block_text (char const * hash_a) { return block_text (nano::block_hash (hash_a)); diff --git a/nano/secure/ledger.hpp b/nano/secure/ledger.hpp index 43d13fbc..a19affbb 100644 --- a/nano/secure/ledger.hpp +++ b/nano/secure/ledger.hpp @@ -48,6 +48,7 @@ public: nano::block_hash representative_calculated (nano::transaction const &, nano::block_hash const &); bool block_or_pruned_exists (nano::block_hash const &) const; bool block_or_pruned_exists (nano::transaction const &, nano::block_hash const &) const; + bool root_exists (nano::transaction const &, nano::root const &); std::string block_text (char const *); std::string block_text (nano::block_hash const &); bool is_send (nano::transaction const &, nano::state_block const &) const; diff --git a/nano/secure/parallel_traversal.hpp b/nano/secure/parallel_traversal.hpp new file mode 100644 index 00000000..80187b21 --- /dev/null +++ b/nano/secure/parallel_traversal.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include + +#include +#include + +template +void parallel_traversal (std::function const & action) +{ + // Between 10 and 40 threads, scales well even in low power systems as long as actions are I/O bound + unsigned const thread_count = std::max (10u, std::min (40u, 10 * std::thread::hardware_concurrency ())); + T const value_max{ std::numeric_limits::max () }; + T const split = value_max / thread_count; + std::vector threads; + threads.reserve (thread_count); + for (unsigned thread (0); thread < thread_count; ++thread) + { + T const start = thread * split; + T const end = (thread + 1) * split; + bool const is_last = thread == thread_count - 1; + + threads.emplace_back ([&action, start, end, is_last] { + nano::thread_role::set (nano::thread_role::name::db_parallel_traversal); + action (start, end, is_last); + }); + } + for (auto & thread : threads) + { + thread.join (); + } +} diff --git a/nano/secure/store.cpp b/nano/secure/store.cpp index 99791afe..dfaa3620 100644 --- a/nano/secure/store.cpp +++ b/nano/secure/store.cpp @@ -1,4 +1,5 @@ #include +#include #include nano::representative_visitor::representative_visitor (nano::transaction const & transaction_a, nano::store & store_a) : @@ -134,6 +135,26 @@ nano::store::store ( } // clang-format on +/** + * If using a different store version than the latest then you may need + * to modify some of the objects in the store to be appropriate for the version before an upgrade. + */ +void nano::store::initialize (nano::write_transaction const & transaction_a, nano::ledger_cache & ledger_cache_a, nano::ledger_constants & constants) +{ + debug_assert (constants.genesis->has_sideband ()); + debug_assert (account.begin (transaction_a) == account.end ()); + auto hash_l (constants.genesis->hash ()); + block.put (transaction_a, hash_l, *constants.genesis); + ++ledger_cache_a.block_count; + confirmation_height.put (transaction_a, constants.genesis->account (), nano::confirmation_height_info{ 1, constants.genesis->hash () }); + ++ledger_cache_a.cemented_count; + ledger_cache_a.final_votes_confirmation_canary = (constants.final_votes_canary_account == constants.genesis->account () && 1 >= constants.final_votes_canary_height); + account.put (transaction_a, constants.genesis->account (), { hash_l, constants.genesis->account (), constants.genesis->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); + ++ledger_cache_a.account_count; + ledger_cache_a.rep_weights.representation_put (constants.genesis->account (), std::numeric_limits::max ()); + frontier.put (transaction_a, hash_l, constants.genesis->account ()); +} + auto nano::unchecked_store::equal_range (nano::transaction const & transaction, nano::block_hash const & dependency) -> std::pair { nano::unchecked_key begin_l{ dependency, 0 }; diff --git a/nano/secure/store.hpp b/nano/secure/store.hpp index be8ce844..84a89a7a 100644 --- a/nano/secure/store.hpp +++ b/nano/secure/store.hpp @@ -845,13 +845,20 @@ public: ); // clang-format on virtual ~store () = default; - virtual void initialize (nano::write_transaction const &, nano::ledger_cache &) = 0; - virtual bool root_exists (nano::transaction const &, nano::root const &) = 0; + void initialize (nano::write_transaction const & transaction_a, nano::ledger_cache & ledger_cache_a, nano::ledger_constants & constants); + virtual uint64_t count (nano::transaction const & transaction_a, tables table_a) const = 0; + virtual int drop (nano::write_transaction const & transaction_a, tables table_a) = 0; + virtual bool not_found (int status) const = 0; + virtual bool success (int status) const = 0; + virtual int status_code_not_found () const = 0; + virtual std::string error_string (int status) const = 0; block_store & block; frontier_store & frontier; account_store & account; pending_store & pending; + static int constexpr version_minimum{ 14 }; + static int constexpr version_current{ 21 }; private: unchecked_store & unchecked; diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp deleted file mode 100644 index d8f72582..00000000 --- a/nano/secure/store_partial.hpp +++ /dev/null @@ -1,191 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -#include - -#include - -class store_partial; -namespace -{ -template -void parallel_traversal (std::function const & action); -} - -namespace nano -{ -template -class store_partial; - -template -void release_assert_success (store_partial const & store, int const status); - -/** This base class implements the store interface functions which have DB agnostic functionality. It also maps all the store classes. */ -template -class store_partial : public store -{ - friend void release_assert_success (store_partial const &, int const); - -public: - // clang-format off - store_partial ( - nano::ledger_constants & constants, - nano::block_store & block_store_a, - nano::frontier_store & frontier_store_a, - nano::account_store & account_store_a, - nano::pending_store & pending_store_a, - nano::unchecked_store & unchecked_store_a, - nano::online_weight_store & online_weight_store_a, - nano::pruned_store & pruned_store_a, - nano::peer_store & peer_store_a, - nano::confirmation_height_store & confirmation_height_store_a, - nano::final_vote_store & final_vote_store_a, - nano::version_store & version_store_a) : - constants{ constants }, - store{ - block_store_a, - frontier_store_a, - account_store_a, - pending_store_a, - unchecked_store_a, - online_weight_store_a, - pruned_store_a, - peer_store_a, - confirmation_height_store_a, - final_vote_store_a, - version_store_a - } - {} - // clang-format on - - /** - * If using a different store version than the latest then you may need - * to modify some of the objects in the store to be appropriate for the version before an upgrade. - */ - void initialize (nano::write_transaction const & transaction_a, nano::ledger_cache & ledger_cache_a) override - { - debug_assert (constants.genesis->has_sideband ()); - debug_assert (account.begin (transaction_a) == account.end ()); - auto hash_l (constants.genesis->hash ()); - block.put (transaction_a, hash_l, *constants.genesis); - ++ledger_cache_a.block_count; - confirmation_height.put (transaction_a, constants.genesis->account (), nano::confirmation_height_info{ 1, constants.genesis->hash () }); - ++ledger_cache_a.cemented_count; - ledger_cache_a.final_votes_confirmation_canary = (constants.final_votes_canary_account == constants.genesis->account () && 1 >= constants.final_votes_canary_height); - account.put (transaction_a, constants.genesis->account (), { hash_l, constants.genesis->account (), constants.genesis->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); - ++ledger_cache_a.account_count; - ledger_cache_a.rep_weights.representation_put (constants.genesis->account (), std::numeric_limits::max ()); - frontier.put (transaction_a, hash_l, constants.genesis->account ()); - } - - bool root_exists (nano::transaction const & transaction_a, nano::root const & root_a) override - { - return block.exists (transaction_a, root_a.as_block_hash ()) || account.exists (transaction_a, root_a.as_account ()); - } - - bool exists (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a) const - { - return static_cast (*this).exists (transaction_a, table_a, key_a); - } - - template - nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, bool const direction_asc = true) const - { - return static_cast (*this).template make_iterator (transaction_a, table_a, direction_asc); - } - - template - nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key) const - { - return static_cast (*this).template make_iterator (transaction_a, table_a, key); - } - - int const minimum_version{ 14 }; - -protected: - nano::ledger_constants & constants; - int const version_number{ 21 }; - - uint64_t count (nano::transaction const & transaction_a, std::initializer_list dbs_a) const - { - uint64_t total_count = 0; - for (auto db : dbs_a) - { - total_count += count (transaction_a, db); - } - return total_count; - } - - int get (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a, nano::db_val & value_a) const - { - return static_cast (*this).get (transaction_a, table_a, key_a, value_a); - } - - int put (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a, nano::db_val const & value_a) - { - return static_cast (*this).put (transaction_a, table_a, key_a, value_a); - } - - // Put only key without value - int put_key (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a) - { - return this->put (transaction_a, table_a, key_a, nano::db_val{ nullptr }); - } - - int del (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a) - { - return static_cast (*this).del (transaction_a, table_a, key_a); - } - - virtual uint64_t count (nano::transaction const & transaction_a, tables table_a) const = 0; - virtual int drop (nano::write_transaction const & transaction_a, tables table_a) = 0; - virtual bool not_found (int status) const = 0; - virtual bool success (int status) const = 0; - virtual int status_code_not_found () const = 0; - virtual std::string error_string (int status) const = 0; -}; - -template -void release_assert_success (store_partial const & store, int const status) -{ - if (!store.success (status)) - { - release_assert (false, store.error_string (status)); - } -} -} - -namespace -{ -template -void parallel_traversal (std::function const & action) -{ - // Between 10 and 40 threads, scales well even in low power systems as long as actions are I/O bound - unsigned const thread_count = std::max (10u, std::min (40u, 10 * std::thread::hardware_concurrency ())); - T const value_max{ std::numeric_limits::max () }; - T const split = value_max / thread_count; - std::vector threads; - threads.reserve (thread_count); - for (unsigned thread (0); thread < thread_count; ++thread) - { - T const start = thread * split; - T const end = (thread + 1) * split; - bool const is_last = thread == thread_count - 1; - - threads.emplace_back ([&action, start, end, is_last] { - nano::thread_role::set (nano::thread_role::name::db_parallel_traversal); - action (start, end, is_last); - }); - } - for (auto & thread : threads) - { - thread.join (); - } -} -} diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 58bcfcde..71019c1a 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -119,7 +119,7 @@ TEST (ledger, deep_account_compute) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key; auto balance (nano::dev::constants.genesis_amount - 1); @@ -1049,7 +1049,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, ledger.cache); + store->initialize (transaction, ledger.cache, ledger.constants); // Send from genesis account to all other accounts and create open block for them for (auto i = 0; i < num_accounts; ++i)