Limit bulk pulls memory usage in lazy bootstrap
flush less pulls from lazy_pulls to pulls
This commit is contained in:
parent
c36c8b7aca
commit
ca6e4f171d
1 changed files with 30 additions and 23 deletions
|
|
@ -819,6 +819,9 @@ void nano::bootstrap_attempt::lazy_requeue (nano::block_hash const & hash_a, nan
|
||||||
void nano::bootstrap_attempt::lazy_pull_flush ()
|
void nano::bootstrap_attempt::lazy_pull_flush ()
|
||||||
{
|
{
|
||||||
assert (!mutex.try_lock ());
|
assert (!mutex.try_lock ());
|
||||||
|
static size_t const max_pulls (nano::bootstrap_limits::bootstrap_connection_scale_target_blocks_lazy * 3);
|
||||||
|
if (pulls.size () < max_pulls)
|
||||||
|
{
|
||||||
last_lazy_flush = std::chrono::steady_clock::now ();
|
last_lazy_flush = std::chrono::steady_clock::now ();
|
||||||
nano::lock_guard<std::mutex> lazy_lock (lazy_mutex);
|
nano::lock_guard<std::mutex> lazy_lock (lazy_mutex);
|
||||||
assert (node->network_params.bootstrap.lazy_max_pull_blocks <= std::numeric_limits<nano::pull_info::count_t>::max ());
|
assert (node->network_params.bootstrap.lazy_max_pull_blocks <= std::numeric_limits<nano::pull_info::count_t>::max ());
|
||||||
|
|
@ -836,16 +839,20 @@ void nano::bootstrap_attempt::lazy_pull_flush ()
|
||||||
batch_count = std::max (node->network_params.bootstrap.lazy_min_pull_blocks, batch_count_min);
|
batch_count = std::max (node->network_params.bootstrap.lazy_min_pull_blocks, batch_count_min);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
size_t count (0);
|
||||||
auto transaction (node->store.tx_begin_read ());
|
auto transaction (node->store.tx_begin_read ());
|
||||||
for (auto & pull_start : lazy_pulls)
|
while (!lazy_pulls.empty () && count < max_pulls)
|
||||||
{
|
{
|
||||||
|
auto const & pull_start (lazy_pulls.front ());
|
||||||
// Recheck if block was already processed
|
// Recheck if block was already processed
|
||||||
if (lazy_blocks.find (pull_start.first) == lazy_blocks.end () && !node->store.block_exists (transaction, pull_start.first))
|
if (lazy_blocks.find (pull_start.first) == lazy_blocks.end () && !node->store.block_exists (transaction, pull_start.first))
|
||||||
{
|
{
|
||||||
pulls.emplace_back (pull_start.first, pull_start.first, nano::block_hash (0), batch_count, pull_start.second);
|
pulls.emplace_back (pull_start.first, pull_start.first, nano::block_hash (0), batch_count, pull_start.second);
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
lazy_pulls.pop_front ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lazy_pulls.clear ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool nano::bootstrap_attempt::lazy_finished ()
|
bool nano::bootstrap_attempt::lazy_finished ()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue