Rewrite bootstrap database_iterator in terms of receivable iterators
This commit is contained in:
parent
4439f46d0c
commit
35ab9d408f
3 changed files with 22 additions and 17 deletions
|
|
@ -1,6 +1,7 @@
|
|||
#include <nano/lib/utility.hpp>
|
||||
#include <nano/node/bootstrap_ascending/iterators.hpp>
|
||||
#include <nano/secure/common.hpp>
|
||||
#include <nano/secure/ledger.hpp>
|
||||
#include <nano/store/account.hpp>
|
||||
#include <nano/store/component.hpp>
|
||||
#include <nano/store/pending.hpp>
|
||||
|
|
@ -9,8 +10,8 @@
|
|||
* database_iterator
|
||||
*/
|
||||
|
||||
nano::bootstrap_ascending::database_iterator::database_iterator (nano::store::component & store_a, table_type table_a) :
|
||||
store{ store_a },
|
||||
nano::bootstrap_ascending::database_iterator::database_iterator (nano::ledger & ledger, table_type table_a) :
|
||||
ledger{ ledger },
|
||||
table{ table_a }
|
||||
{
|
||||
}
|
||||
|
|
@ -27,8 +28,8 @@ void nano::bootstrap_ascending::database_iterator::next (store::transaction & tx
|
|||
case table_type::account:
|
||||
{
|
||||
auto i = current.number () + 1;
|
||||
auto item = store.account.begin (tx, i);
|
||||
if (item != store.account.end ())
|
||||
auto item = ledger.store.account.begin (tx, i);
|
||||
if (item != ledger.store.account.end ())
|
||||
{
|
||||
current = item->first;
|
||||
}
|
||||
|
|
@ -40,9 +41,8 @@ void nano::bootstrap_ascending::database_iterator::next (store::transaction & tx
|
|||
}
|
||||
case table_type::pending:
|
||||
{
|
||||
auto i = current.number () + 1;
|
||||
auto item = store.pending.begin (tx, nano::pending_key{ i, 0 });
|
||||
if (item != store.pending.end ())
|
||||
auto item = ledger.receivable_upper_bound (tx, current);
|
||||
if (item != ledger.receivable_end ())
|
||||
{
|
||||
current = item->first.account;
|
||||
}
|
||||
|
|
@ -59,10 +59,10 @@ void nano::bootstrap_ascending::database_iterator::next (store::transaction & tx
|
|||
* buffered_iterator
|
||||
*/
|
||||
|
||||
nano::bootstrap_ascending::buffered_iterator::buffered_iterator (nano::store::component & store_a) :
|
||||
store{ store_a },
|
||||
accounts_iterator{ store, database_iterator::table_type::account },
|
||||
pending_iterator{ store, database_iterator::table_type::pending }
|
||||
nano::bootstrap_ascending::buffered_iterator::buffered_iterator (nano::ledger & ledger) :
|
||||
ledger{ ledger },
|
||||
accounts_iterator{ ledger, database_iterator::table_type::account },
|
||||
pending_iterator{ ledger, database_iterator::table_type::pending }
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ void nano::bootstrap_ascending::buffered_iterator::fill ()
|
|||
debug_assert (buffer.empty ());
|
||||
|
||||
// Fill half from accounts table and half from pending table
|
||||
auto transaction = store.tx_begin_read ();
|
||||
auto transaction = ledger.store.tx_begin_read ();
|
||||
|
||||
for (int n = 0; n < size / 2; ++n)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,6 +4,11 @@
|
|||
|
||||
#include <deque>
|
||||
|
||||
namespace nano
|
||||
{
|
||||
class ledger;
|
||||
}
|
||||
|
||||
namespace nano::store
|
||||
{
|
||||
class component;
|
||||
|
|
@ -21,12 +26,12 @@ public:
|
|||
pending
|
||||
};
|
||||
|
||||
explicit database_iterator (nano::store::component & store, table_type);
|
||||
explicit database_iterator (nano::ledger & ledger, table_type);
|
||||
nano::account operator* () const;
|
||||
void next (nano::store::transaction & tx);
|
||||
|
||||
private:
|
||||
nano::store::component & store;
|
||||
nano::ledger & ledger;
|
||||
nano::account current{ 0 };
|
||||
const table_type table;
|
||||
};
|
||||
|
|
@ -34,7 +39,7 @@ private:
|
|||
class buffered_iterator
|
||||
{
|
||||
public:
|
||||
explicit buffered_iterator (nano::store::component & store);
|
||||
explicit buffered_iterator (nano::ledger & ledger);
|
||||
nano::account operator* () const;
|
||||
nano::account next ();
|
||||
// Indicates if a full ledger iteration has taken place e.g. warmed up
|
||||
|
|
@ -44,7 +49,7 @@ private:
|
|||
void fill ();
|
||||
|
||||
private:
|
||||
nano::store::component & store;
|
||||
nano::ledger & ledger;
|
||||
std::deque<nano::account> buffer;
|
||||
bool warmup_m{ true };
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ nano::bootstrap_ascending::service::service (nano::node_config & config_a, nano:
|
|||
network{ network_a },
|
||||
stats{ stat_a },
|
||||
accounts{ stats },
|
||||
iterator{ ledger.store },
|
||||
iterator{ ledger },
|
||||
throttle{ compute_throttle_size () },
|
||||
scoring{ config.bootstrap_ascending, config.network_params.network },
|
||||
database_limiter{ config.bootstrap_ascending.database_requests_limit, 1.0 }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue