diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 218e0cd1..4677c509 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -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 ()), diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 5199eaa3..e1bc0b7d 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -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> pending_infos; pending_infos.reserve (pending_counters.before_v0 + pending_counters.before_v1); - nano::mdb_merge_iterator i_pending (transaction_a, pending_v0_handle, pending_v1_handle); + nano::mdb_merge_iterator i_pending (transaction_a, pending_store.pending_v0_handle, pending_store.pending_v1_handle); nano::mdb_merge_iterator 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 (std::make_unique> (transaction_a, pending_handle))), n (nano::store_iterator (nullptr)); i != n; ++i) + for (auto i (nano::store_iterator (std::make_unique> (transaction_a, pending_store.pending_handle))), n (nano::store_iterator (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 (std::make_unique> (transaction_a, temp))), n (nano::store_iterator (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); } } diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index 9768564c..a1932346 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -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 diff --git a/nano/node/lmdb/pending_store.hpp b/nano/node/lmdb/pending_store.hpp index e327354e..30896d65 100644 --- a/nano/node/lmdb/pending_store.hpp +++ b/nano/node/lmdb/pending_store.hpp @@ -2,6 +2,8 @@ #include +#include + namespace nano { namespace lmdb @@ -23,6 +25,24 @@ namespace lmdb nano::store_iterator begin (nano::transaction const & transaction_a) const override; nano::store_iterator end () const override; void for_each_par (std::function, nano::store_iterator)> 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 }; }; } }