From d1b62a09b11a4d7a73036e611e7c4013c189a798 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Tue, 29 Sep 2020 16:34:11 +0300 Subject: [PATCH] [Pruning] Use pruned blocks in rep crawler (#2975) * [Pruning] Use pruned blocks in rep crawler * Use const reference for hash-root pair --- nano/node/network.cpp | 6 +++--- nano/node/network.hpp | 2 +- nano/node/repcrawler.cpp | 16 +++++++--------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 5517a950..fd02c8c2 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -238,10 +238,10 @@ void nano::network::flood_block_many (std::deque> b } } -void nano::network::send_confirm_req (std::shared_ptr channel_a, std::shared_ptr block_a) +void nano::network::send_confirm_req (std::shared_ptr channel_a, std::pair const & hash_root_a) { // Confirmation request with hash + root - nano::confirm_req req (block_a->hash (), block_a->root ()); + nano::confirm_req req (hash_root_a.first, hash_root_a.second); channel_a->send (req); } @@ -284,7 +284,7 @@ void nano::network::broadcast_confirm_req_base (std::shared_ptr blo while (!endpoints_a->empty () && count < max_reps) { auto channel (endpoints_a->back ()); - send_confirm_req (channel, block_a); + send_confirm_req (channel, std::make_pair (block_a->hash (), block_a->root ().as_block_hash ())); endpoints_a->pop_back (); count++; } diff --git a/nano/node/network.hpp b/nano/node/network.hpp index 07c87455..67067af7 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -147,7 +147,7 @@ public: void send_keepalive (std::shared_ptr); void send_keepalive_self (std::shared_ptr); void send_node_id_handshake (std::shared_ptr, boost::optional const & query, boost::optional const & respond_to); - void send_confirm_req (std::shared_ptr, std::shared_ptr); + void send_confirm_req (std::shared_ptr channel_a, std::pair const & hash_root_a); void broadcast_confirm_req (std::shared_ptr); void broadcast_confirm_req_base (std::shared_ptr, std::shared_ptr>>, unsigned, bool = false); void broadcast_confirm_req_batched_many (std::unordered_map, std::deque>>, std::function = nullptr, unsigned = broadcast_interval_ms, bool = false); diff --git a/nano/node/repcrawler.cpp b/nano/node/repcrawler.cpp index 1b44682c..5707b779 100644 --- a/nano/node/repcrawler.cpp +++ b/nano/node/repcrawler.cpp @@ -133,35 +133,33 @@ std::vector> nano::rep_crawler::get_cr void nano::rep_crawler::query (std::vector> const & channels_a) { auto transaction (node.store.tx_begin_read ()); - std::shared_ptr block (node.store.block_random (transaction)); - auto hash (block->hash ()); + auto hash_root (node.ledger.hash_root_random (transaction)); { nano::lock_guard lock (active_mutex); // Don't send same block multiple times in tests if (node.network_params.network.is_dev_network ()) { - for (auto i (0); active.count (hash) != 0 && i < 4; ++i) + for (auto i (0); active.count (hash_root.first) != 0 && i < 4; ++i) { - block = node.store.block_random (transaction); - hash = block->hash (); + hash_root = node.ledger.hash_root_random (transaction); } } - active.insert (hash); + active.insert (hash_root.first); } if (!channels_a.empty ()) { - node.active.erase_recently_confirmed (hash); + node.active.erase_recently_confirmed (hash_root.first); } for (auto i (channels_a.begin ()), n (channels_a.end ()); i != n; ++i) { debug_assert (*i != nullptr); on_rep_request (*i); - node.network.send_confirm_req (*i, block); + node.network.send_confirm_req (*i, hash_root); } // A representative must respond with a vote within the deadline std::weak_ptr node_w (node.shared ()); - node.alarm.add (std::chrono::steady_clock::now () + std::chrono::seconds (5), [node_w, hash]() { + node.alarm.add (std::chrono::steady_clock::now () + std::chrono::seconds (5), [node_w, hash = hash_root.first]() { if (auto node_l = node_w.lock ()) { node_l->rep_crawler.remove (hash);