From 8ae15f305e081df337059c485c548906947fe4e0 Mon Sep 17 00:00:00 2001 From: Colin LeMahieu Date: Fri, 26 Jan 2024 17:55:08 +0000 Subject: [PATCH] Removing usage of block_processor::flush from bootstrap_legacy and removing bootstrap_processor::flush. --- nano/node/blockprocessor.cpp | 11 ----------- nano/node/blockprocessor.hpp | 1 - nano/node/bootstrap/bootstrap_legacy.cpp | 10 ++++++---- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index e696b5966b..76786fd247 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -37,17 +37,6 @@ void nano::block_processor::stop () nano::join_or_pass (processing_thread); } -void nano::block_processor::flush () -{ - flushing = true; - nano::unique_lock lock{ mutex }; - while (!stopped && (have_blocks () || active)) - { - condition.wait (lock); - } - flushing = false; -} - std::size_t nano::block_processor::size () { nano::unique_lock lock{ mutex }; diff --git a/nano/node/blockprocessor.hpp b/nano/node/blockprocessor.hpp index fc6c7172a0..a53fa80761 100644 --- a/nano/node/blockprocessor.hpp +++ b/nano/node/blockprocessor.hpp @@ -29,7 +29,6 @@ class block_processor final public: explicit block_processor (nano::node &, nano::write_database_queue &); void stop (); - void flush (); std::size_t size (); bool full (); bool half_full (); diff --git a/nano/node/bootstrap/bootstrap_legacy.cpp b/nano/node/bootstrap/bootstrap_legacy.cpp index 446d094646..9badee97cc 100644 --- a/nano/node/bootstrap/bootstrap_legacy.cpp +++ b/nano/node/bootstrap/bootstrap_legacy.cpp @@ -223,10 +223,12 @@ void nano::bootstrap_attempt_legacy::run () condition.wait (lock, [&stopped = stopped, &pulling = pulling] { return stopped || pulling == 0; }); } - // Flushing may resolve forks which can add more pulls - lock.unlock (); - node->block_processor.flush (); - lock.lock (); + // TODO: This check / wait is a heuristic and should be improved. + auto wait_start = std::chrono::steady_clock::now (); + while (!stopped && node->block_processor.size () != 0 && ((std::chrono::steady_clock::now () - wait_start) < std::chrono::seconds{ 10 })) + { + condition.wait_for (lock, std::chrono::milliseconds{ 100 }, [this, node] { return stopped || node->block_processor.size () == 0; }); + } if (start_account.number () != std::numeric_limits::max ()) {