Moved the pending LMDB table handlers to their store class

This commit is contained in:
Thiago Silva 2022-04-11 16:47:26 -03:00
commit ffa60fcc06
4 changed files with 38 additions and 36 deletions

View file

@ -1326,7 +1326,7 @@ namespace lmdb
ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE,
&store.account_store.accounts_v1_handle)); &store.account_store.accounts_v1_handle));
ASSERT_FALSE ( ASSERT_FALSE (
mdb_dbi_open (store.env.tx (transaction), "pending_v1", MDB_CREATE, &store.pending_v1_handle)); mdb_dbi_open (store.env.tx (transaction), "pending_v1", MDB_CREATE, &store.pending_store.pending_v1_handle));
ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle));
ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "send", MDB_CREATE, &store.send_blocks_handle)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "send", MDB_CREATE, &store.send_blocks_handle));
ASSERT_FALSE ( ASSERT_FALSE (
@ -1353,13 +1353,13 @@ namespace lmdb
store.block.del (transaction, epoch.hash ()); store.block.del (transaction, epoch.hash ());
// Turn pending into v14 // Turn pending into v14
ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v0_handle, ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_store.pending_v0_handle,
nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, send.hash ())), nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, send.hash ())),
nano::mdb_val ( nano::mdb_val (
nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio, nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio,
nano::epoch::epoch_0)), nano::epoch::epoch_0)),
0)); 0));
ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v1_handle, ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_store.pending_v1_handle,
nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, state_send.hash ())), nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, state_send.hash ())),
nano::mdb_val ( nano::mdb_val (
nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio, nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio,
@ -1404,7 +1404,7 @@ namespace lmdb
auto error_get_accounts_v1 (mdb_get (store.env.tx (transaction), store.account_store.accounts_v1_handle, auto error_get_accounts_v1 (mdb_get (store.env.tx (transaction), store.account_store.accounts_v1_handle,
nano::mdb_val (nano::dev::genesis->account ()), value)); nano::mdb_val (nano::dev::genesis->account ()), value));
ASSERT_NE (error_get_accounts_v1, MDB_SUCCESS); ASSERT_NE (error_get_accounts_v1, MDB_SUCCESS);
auto error_get_pending_v1 (mdb_get (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, state_send.hash ())), value)); auto error_get_pending_v1 (mdb_get (store.env.tx (transaction), store.pending_store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, state_send.hash ())), value));
ASSERT_NE (error_get_pending_v1, MDB_SUCCESS); ASSERT_NE (error_get_pending_v1, MDB_SUCCESS);
auto error_get_state_v1 ( auto error_get_state_v1 (
mdb_get (store.env.tx (transaction), store.state_blocks_v1_handle, nano::mdb_val (state_send.hash ()), mdb_get (store.env.tx (transaction), store.state_blocks_v1_handle, nano::mdb_val (state_send.hash ()),

View file

@ -219,8 +219,8 @@ void nano::lmdb::store::open_databases (bool & error_a, nano::transaction const
error_a |= mdb_dbi_open (env.tx (transaction_a), "confirmation_height", flags, &confirmation_height_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "confirmation_height", flags, &confirmation_height_handle) != 0;
error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts", flags, &account_store.accounts_v0_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts", flags, &account_store.accounts_v0_handle) != 0;
account_store.accounts_handle = account_store.accounts_v0_handle; account_store.accounts_handle = account_store.accounts_v0_handle;
error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_v0_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_store.pending_v0_handle) != 0;
pending_handle = pending_v0_handle; pending_store.pending_handle = pending_store.pending_v0_handle;
error_a |= mdb_dbi_open (env.tx (transaction_a), "final_votes", flags, &final_votes_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "final_votes", flags, &final_votes_handle) != 0;
auto version_l = version.get (transaction_a); auto version_l = version.get (transaction_a);
@ -254,7 +254,7 @@ void nano::lmdb::store::open_databases (bool & error_a, nano::transaction const
error_a |= mdb_dbi_open (env.tx (transaction_a), "state", flags, &state_blocks_v0_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "state", flags, &state_blocks_v0_handle) != 0;
state_blocks_handle = state_blocks_v0_handle; state_blocks_handle = state_blocks_v0_handle;
error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts_v1", flags, &account_store.accounts_v1_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts_v1", flags, &account_store.accounts_v1_handle) != 0;
error_a |= mdb_dbi_open (env.tx (transaction_a), "pending_v1", flags, &pending_v1_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pending_v1", flags, &pending_store.pending_v1_handle) != 0;
error_a |= mdb_dbi_open (env.tx (transaction_a), "state_v1", flags, &state_blocks_v1_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "state_v1", flags, &state_blocks_v1_handle) != 0;
} }
} }
@ -405,11 +405,11 @@ void nano::lmdb::store::upgrade_v14_to_v15 (nano::write_transaction & transactio
state_blocks_v0_handle = state_blocks_handle; state_blocks_v0_handle = state_blocks_handle;
upgrade_counters pending_counters (count (transaction_a, pending_v0_handle), count (transaction_a, pending_v1_handle)); upgrade_counters pending_counters (count (transaction_a, pending_store.pending_v0_handle), count (transaction_a, pending_store.pending_v1_handle));
std::vector<std::pair<nano::pending_key, nano::pending_info>> pending_infos; std::vector<std::pair<nano::pending_key, nano::pending_info>> pending_infos;
pending_infos.reserve (pending_counters.before_v0 + pending_counters.before_v1); pending_infos.reserve (pending_counters.before_v0 + pending_counters.before_v1);
nano::mdb_merge_iterator<nano::pending_key, nano::pending_info_v14> i_pending (transaction_a, pending_v0_handle, pending_v1_handle); nano::mdb_merge_iterator<nano::pending_key, nano::pending_info_v14> i_pending (transaction_a, pending_store.pending_v0_handle, pending_store.pending_v1_handle);
nano::mdb_merge_iterator<nano::pending_key, nano::pending_info_v14> n_pending{}; nano::mdb_merge_iterator<nano::pending_key, nano::pending_info_v14> n_pending{};
for (; i_pending != n_pending; ++i_pending) for (; i_pending != n_pending; ++i_pending)
{ {
@ -421,12 +421,12 @@ void nano::lmdb::store::upgrade_v14_to_v15 (nano::write_transaction & transactio
debug_assert (pending_counters.are_equal ()); debug_assert (pending_counters.are_equal ());
// No longer need the pending v1 table // No longer need the pending v1 table
mdb_drop (env.tx (transaction_a), pending_v1_handle, 1); mdb_drop (env.tx (transaction_a), pending_store.pending_v1_handle, 1);
mdb_drop (env.tx (transaction_a), pending_v0_handle, 0); mdb_drop (env.tx (transaction_a), pending_store.pending_v0_handle, 0);
for (auto const & pending_key_pending_info_pair : pending_infos) for (auto const & pending_key_pending_info_pair : pending_infos)
{ {
mdb_put (env.tx (transaction_a), pending_handle, nano::mdb_val (pending_key_pending_info_pair.first), nano::mdb_val (pending_key_pending_info_pair.second), MDB_APPEND); mdb_put (env.tx (transaction_a), pending_store.pending_handle, nano::mdb_val (pending_key_pending_info_pair.first), nano::mdb_val (pending_key_pending_info_pair.second), MDB_APPEND);
} }
version.put (transaction_a, 15); version.put (transaction_a, 15);
@ -867,7 +867,7 @@ MDB_dbi nano::lmdb::store::table_to_dbi (tables table_a) const
case tables::blocks: case tables::blocks:
return blocks_handle; return blocks_handle;
case tables::pending: case tables::pending:
return pending_handle; return pending_store.pending_handle;
case tables::unchecked: case tables::unchecked:
return unchecked_handle; return unchecked_handle;
case tables::online_weight: case tables::online_weight:
@ -945,20 +945,20 @@ void nano::lmdb::store::rebuild_db (nano::write_transaction const & transaction_
MDB_dbi temp; MDB_dbi temp;
mdb_dbi_open (env.tx (transaction_a), "temp_table", MDB_CREATE, &temp); mdb_dbi_open (env.tx (transaction_a), "temp_table", MDB_CREATE, &temp);
// Copy all values to temporary table // Copy all values to temporary table
for (auto i (nano::store_iterator<nano::pending_key, nano::pending_info> (std::make_unique<nano::mdb_iterator<nano::pending_key, nano::pending_info>> (transaction_a, pending_handle))), n (nano::store_iterator<nano::pending_key, nano::pending_info> (nullptr)); i != n; ++i) for (auto i (nano::store_iterator<nano::pending_key, nano::pending_info> (std::make_unique<nano::mdb_iterator<nano::pending_key, nano::pending_info>> (transaction_a, pending_store.pending_handle))), n (nano::store_iterator<nano::pending_key, nano::pending_info> (nullptr)); i != n; ++i)
{ {
auto s = mdb_put (env.tx (transaction_a), temp, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); auto s = mdb_put (env.tx (transaction_a), temp, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND);
release_assert_success (s); release_assert_success (s);
} }
release_assert (count (transaction_a, pending_handle) == count (transaction_a, temp)); release_assert (count (transaction_a, pending_store.pending_handle) == count (transaction_a, temp));
mdb_drop (env.tx (transaction_a), pending_handle, 0); mdb_drop (env.tx (transaction_a), pending_store.pending_handle, 0);
// Put values from copy // Put values from copy
for (auto i (nano::store_iterator<nano::pending_key, nano::pending_info> (std::make_unique<nano::mdb_iterator<nano::pending_key, nano::pending_info>> (transaction_a, temp))), n (nano::store_iterator<nano::pending_key, nano::pending_info> (nullptr)); i != n; ++i) for (auto i (nano::store_iterator<nano::pending_key, nano::pending_info> (std::make_unique<nano::mdb_iterator<nano::pending_key, nano::pending_info>> (transaction_a, temp))), n (nano::store_iterator<nano::pending_key, nano::pending_info> (nullptr)); i != n; ++i)
{ {
auto s = mdb_put (env.tx (transaction_a), pending_handle, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); auto s = mdb_put (env.tx (transaction_a), pending_store.pending_handle, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND);
release_assert_success (s); release_assert_success (s);
} }
release_assert (count (transaction_a, pending_handle) == count (transaction_a, temp)); release_assert (count (transaction_a, pending_store.pending_handle) == count (transaction_a, temp));
mdb_drop (env.tx (transaction_a), temp, 1); mdb_drop (env.tx (transaction_a), temp, 1);
} }
} }

View file

@ -136,24 +136,6 @@ namespace lmdb
*/ */
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 };
/**
* 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 };
/**
* 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 };
/** /**
* Unchecked bootstrap blocks info. * Unchecked bootstrap blocks info.
* nano::block_hash -> nano::unchecked_info * nano::block_hash -> nano::unchecked_info

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
@ -23,6 +25,24 @@ namespace lmdb
nano::store_iterator<nano::pending_key, nano::pending_info> begin (nano::transaction const & transaction_a) const override; nano::store_iterator<nano::pending_key, nano::pending_info> begin (nano::transaction const & transaction_a) const override;
nano::store_iterator<nano::pending_key, nano::pending_info> end () const override; nano::store_iterator<nano::pending_key, nano::pending_info> end () const override;
void for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::pending_key, nano::pending_info>, nano::store_iterator<nano::pending_key, nano::pending_info>)> const & action_a) const override; void for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::pending_key, nano::pending_info>, nano::store_iterator<nano::pending_key, nano::pending_info>)> const & action_a) const override;
/**
* 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 };
/**
* 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 };
/**
* 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 };
}; };
} }
} }