Moved the unchecked LMDB table handler to its store class

This commit is contained in:
Thiago Silva 2022-04-11 17:40:53 -03:00
commit b075c9459b
4 changed files with 40 additions and 31 deletions

View file

@ -965,30 +965,36 @@ TEST (block_store, pruned_random)
ASSERT_EQ (hash1, random_hash); ASSERT_EQ (hash1, random_hash);
} }
// Databases need to be dropped in order to convert to dupsort compatible namespace nano
TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort table
{ {
auto path (nano::unique_path ()); namespace lmdb
nano::logger_mt logger{}; {
nano::lmdb::store store{ logger, path, nano::dev::constants }; // Databases need to be dropped in order to convert to dupsort compatible
nano::unchecked_map unchecked{ store, false }; TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort table
auto transaction (store.tx_begin_write ()); {
ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 1)); auto path (nano::unique_path ());
ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE, &store.unchecked_handle)); nano::logger_mt logger{};
std::shared_ptr<nano::block> send1 = std::make_shared<nano::send_block> (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); nano::lmdb::store store{ logger, path, nano::dev::constants };
std::shared_ptr<nano::block> send2 = std::make_shared<nano::send_block> (1, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); nano::unchecked_map unchecked{ store, false };
ASSERT_NE (send1->hash (), send2->hash ()); auto transaction (store.tx_begin_write ());
unchecked.put (send1->hash (), send1); ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_store.unchecked_handle, 1));
unchecked.put (send1->hash (), send2); ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE, &store.unchecked_store.unchecked_handle));
ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 0)); std::shared_ptr<nano::block> send1 = std::make_shared<nano::send_block> (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0);
mdb_dbi_close (store.env, store.unchecked_handle); std::shared_ptr<nano::block> send2 = std::make_shared<nano::send_block> (1, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0);
ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_handle)); ASSERT_NE (send1->hash (), send2->hash ());
unchecked.put (send1->hash (), send1); unchecked.put (send1->hash (), send1);
unchecked.put (send1->hash (), send2); unchecked.put (send1->hash (), send2);
ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 1)); ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_store.unchecked_handle, 0));
ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_handle)); mdb_dbi_close (store.env, store.unchecked_store.unchecked_handle);
unchecked.put (send1->hash (), send1); ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_store.unchecked_handle));
unchecked.put (send1->hash (), send2); 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) TEST (block_store, state_block)

View file

@ -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) 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), "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), "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), "meta", flags, &meta_handle) != 0;
error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peer_store.peers_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: case tables::pending:
return pending_store.pending_handle; return pending_store.pending_handle;
case tables::unchecked: case tables::unchecked:
return unchecked_handle; return unchecked_store.unchecked_handle;
case tables::online_weight: case tables::online_weight:
return online_weight_store.online_weight_handle; return online_weight_store.online_weight_handle;
case tables::meta: case tables::meta:

View file

@ -136,12 +136,6 @@ namespace lmdb
*/ */
MDB_dbi state_blocks_handle{ 0 }; 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. * Meta information about block store, such as versions.
* nano::uint256_union (arbitrary key) -> blob * 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_v15_v16_Test;
friend class mdb_block_store_upgrade_v19_v20_Test; friend class mdb_block_store_upgrade_v19_v20_Test;
friend class mdb_block_store_upgrade_v20_v21_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_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); friend void modify_confirmation_height_to_v15 (nano::lmdb::store &, nano::transaction const &, nano::account const &, uint64_t);
}; };

View file

@ -2,6 +2,8 @@
#include <nano/secure/store.hpp> #include <nano/secure/store.hpp>
#include <lmdb/libraries/liblmdb/lmdb.h>
namespace nano namespace nano
{ {
namespace lmdb namespace lmdb
@ -24,6 +26,12 @@ namespace lmdb
nano::store_iterator<nano::unchecked_key, nano::unchecked_info> lower_bound (nano::transaction const & transaction_a, nano::unchecked_key const & key_a) const override; nano::store_iterator<nano::unchecked_key, nano::unchecked_info> lower_bound (nano::transaction const & transaction_a, nano::unchecked_key const & key_a) const override;
size_t count (nano::transaction const & transaction_a) override; size_t count (nano::transaction const & transaction_a) override;
void for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::unchecked_key, nano::unchecked_info>, nano::store_iterator<nano::unchecked_key, nano::unchecked_info>)> const & action_a) const override; void for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::unchecked_key, nano::unchecked_info>, nano::store_iterator<nano::unchecked_key, nano::unchecked_info>)> const & action_a) const override;
/**
* Unchecked bootstrap blocks info.
* nano::block_hash -> nano::unchecked_info
*/
MDB_dbi unchecked_handle{ 0 };
}; };
} }
} }