From b075c9459b0344877683b6dff44c98916133bcc2 Mon Sep 17 00:00:00 2001 From: Thiago Silva Date: Mon, 11 Apr 2022 17:40:53 -0300 Subject: [PATCH] Moved the unchecked LMDB table handler to its store class --- nano/core_test/block_store.cpp | 52 +++++++++++++++++------------- nano/node/lmdb/lmdb.cpp | 4 +-- nano/node/lmdb/lmdb.hpp | 7 +--- nano/node/lmdb/unchecked_store.hpp | 8 +++++ 4 files changed, 40 insertions(+), 31 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index adc99fd6..e09bfacf 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -965,30 +965,36 @@ TEST (block_store, pruned_random) ASSERT_EQ (hash1, random_hash); } -// Databases need to be dropped in order to convert to dupsort compatible -TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort table +namespace nano { - auto path (nano::unique_path ()); - nano::logger_mt logger{}; - 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)); - ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE, &store.unchecked_handle)); - std::shared_ptr send1 = std::make_shared (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); - std::shared_ptr send2 = std::make_shared (1, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); - ASSERT_NE (send1->hash (), send2->hash ()); - unchecked.put (send1->hash (), send1); - unchecked.put (send1->hash (), send2); - ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 0)); - mdb_dbi_close (store.env, store.unchecked_handle); - ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_handle)); - unchecked.put (send1->hash (), send1); - unchecked.put (send1->hash (), send2); - ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 1)); - ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_handle)); - unchecked.put (send1->hash (), send1); - unchecked.put (send1->hash (), send2); +namespace lmdb +{ + // Databases need to be dropped in order to convert to dupsort compatible + TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort table + { + auto path (nano::unique_path ()); + nano::logger_mt logger{}; + 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_store.unchecked_handle, 1)); + ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE, &store.unchecked_store.unchecked_handle)); + std::shared_ptr send1 = std::make_shared (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + std::shared_ptr send2 = std::make_shared (1, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + ASSERT_NE (send1->hash (), send2->hash ()); + unchecked.put (send1->hash (), send1); + unchecked.put (send1->hash (), send2); + ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_store.unchecked_handle, 0)); + mdb_dbi_close (store.env, store.unchecked_store.unchecked_handle); + ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_store.unchecked_handle)); + unchecked.put (send1->hash (), send1); + unchecked.put (send1->hash (), send2); + ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_store.unchecked_handle, 1)); + ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_store.unchecked_handle)); + unchecked.put (send1->hash (), send1); + unchecked.put (send1->hash (), send2); + } +} } TEST (block_store, state_block) diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index baac0058..a013c36f 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -211,7 +211,7 @@ nano::mdb_txn_callbacks nano::lmdb::store::create_txn_callbacks () const 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, &frontier_store.frontiers_handle) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "unchecked", flags, &unchecked_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "unchecked", flags, &unchecked_store.unchecked_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "online_weight", flags, &online_weight_store.online_weight_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "meta", flags, &meta_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peer_store.peers_handle) != 0; @@ -869,7 +869,7 @@ MDB_dbi nano::lmdb::store::table_to_dbi (tables table_a) const case tables::pending: return pending_store.pending_handle; case tables::unchecked: - return unchecked_handle; + return unchecked_store.unchecked_handle; case tables::online_weight: return online_weight_store.online_weight_handle; case tables::meta: diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index a16a88ec..7916f23d 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -136,12 +136,6 @@ namespace lmdb */ MDB_dbi state_blocks_handle{ 0 }; - /** - * Unchecked bootstrap blocks info. - * nano::block_hash -> nano::unchecked_info - */ - MDB_dbi unchecked_handle{ 0 }; - /** * Meta information about block store, such as versions. * nano::uint256_union (arbitrary key) -> blob @@ -245,6 +239,7 @@ namespace lmdb friend class mdb_block_store_upgrade_v15_v16_Test; friend class mdb_block_store_upgrade_v19_v20_Test; friend class mdb_block_store_upgrade_v20_v21_Test; + friend class block_store_DISABLED_change_dupsort_Test; friend void modify_account_info_to_v14 (nano::lmdb::store &, nano::transaction const &, nano::account const &, uint64_t, nano::block_hash const &); friend void modify_confirmation_height_to_v15 (nano::lmdb::store &, nano::transaction const &, nano::account const &, uint64_t); }; diff --git a/nano/node/lmdb/unchecked_store.hpp b/nano/node/lmdb/unchecked_store.hpp index 62bc2182..5cb40acb 100644 --- a/nano/node/lmdb/unchecked_store.hpp +++ b/nano/node/lmdb/unchecked_store.hpp @@ -2,6 +2,8 @@ #include +#include + namespace nano { namespace lmdb @@ -24,6 +26,12 @@ namespace lmdb nano::store_iterator lower_bound (nano::transaction const & transaction_a, nano::unchecked_key const & key_a) const override; size_t count (nano::transaction const & transaction_a) override; void for_each_par (std::function, nano::store_iterator)> const & action_a) const override; + + /** + * Unchecked bootstrap blocks info. + * nano::block_hash -> nano::unchecked_info + */ + MDB_dbi unchecked_handle{ 0 }; }; } }