Moved the pending LMDB table handlers to their store class
This commit is contained in:
parent
d57bdf2722
commit
ffa60fcc06
4 changed files with 38 additions and 36 deletions
|
@ -1326,7 +1326,7 @@ namespace lmdb
|
|||
ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE,
|
||||
&store.account_store.accounts_v1_handle));
|
||||
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), "send", MDB_CREATE, &store.send_blocks_handle));
|
||||
ASSERT_FALSE (
|
||||
|
@ -1353,13 +1353,13 @@ namespace lmdb
|
|||
store.block.del (transaction, epoch.hash ());
|
||||
|
||||
// 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_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio,
|
||||
nano::epoch::epoch_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_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,
|
||||
nano::mdb_val (nano::dev::genesis->account ()), value));
|
||||
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);
|
||||
auto error_get_state_v1 (
|
||||
mdb_get (store.env.tx (transaction), store.state_blocks_v1_handle, nano::mdb_val (state_send.hash ()),
|
||||
|
|
|
@ -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), "accounts", flags, &account_store.accounts_v0_handle) != 0;
|
||||
account_store.accounts_handle = account_store.accounts_v0_handle;
|
||||
error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_v0_handle) != 0;
|
||||
pending_handle = pending_v0_handle;
|
||||
error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_store.pending_v0_handle) != 0;
|
||||
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;
|
||||
|
||||
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;
|
||||
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), "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;
|
||||
}
|
||||
}
|
||||
|
@ -405,11 +405,11 @@ void nano::lmdb::store::upgrade_v14_to_v15 (nano::write_transaction & transactio
|
|||
|
||||
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;
|
||||
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{};
|
||||
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 ());
|
||||
|
||||
// No longer need the pending v1 table
|
||||
mdb_drop (env.tx (transaction_a), pending_v1_handle, 1);
|
||||
mdb_drop (env.tx (transaction_a), pending_v0_handle, 0);
|
||||
mdb_drop (env.tx (transaction_a), pending_store.pending_v1_handle, 1);
|
||||
mdb_drop (env.tx (transaction_a), pending_store.pending_v0_handle, 0);
|
||||
|
||||
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);
|
||||
|
@ -867,7 +867,7 @@ MDB_dbi nano::lmdb::store::table_to_dbi (tables table_a) const
|
|||
case tables::blocks:
|
||||
return blocks_handle;
|
||||
case tables::pending:
|
||||
return pending_handle;
|
||||
return pending_store.pending_handle;
|
||||
case tables::unchecked:
|
||||
return unchecked_handle;
|
||||
case tables::online_weight:
|
||||
|
@ -945,20 +945,20 @@ void nano::lmdb::store::rebuild_db (nano::write_transaction const & transaction_
|
|||
MDB_dbi temp;
|
||||
mdb_dbi_open (env.tx (transaction_a), "temp_table", MDB_CREATE, &temp);
|
||||
// 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);
|
||||
release_assert_success (s);
|
||||
}
|
||||
release_assert (count (transaction_a, pending_handle) == count (transaction_a, temp));
|
||||
mdb_drop (env.tx (transaction_a), pending_handle, 0);
|
||||
release_assert (count (transaction_a, pending_store.pending_handle) == count (transaction_a, temp));
|
||||
mdb_drop (env.tx (transaction_a), pending_store.pending_handle, 0);
|
||||
// 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)
|
||||
{
|
||||
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 (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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -136,24 +136,6 @@ namespace lmdb
|
|||
*/
|
||||
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.
|
||||
* nano::block_hash -> nano::unchecked_info
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
#include <nano/secure/store.hpp>
|
||||
|
||||
#include <lmdb/libraries/liblmdb/lmdb.h>
|
||||
|
||||
namespace nano
|
||||
{
|
||||
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> 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;
|
||||
|
||||
/**
|
||||
* 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 };
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue