From 7684a30045116f767828a3a0d6c6e240ad488b4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wo=CC=81jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Mon, 4 Nov 2024 17:19:07 +0100 Subject: [PATCH] Delete by qualified root only --- nano/core_test/block_store.cpp | 5 +---- nano/node/cli.cpp | 4 ++-- nano/store/final_vote.hpp | 3 +-- nano/store/lmdb/final_vote.cpp | 20 +++----------------- nano/store/lmdb/final_vote.hpp | 3 +-- nano/store/rocksdb/final_vote.cpp | 20 +++----------------- nano/store/rocksdb/final_vote.hpp | 3 +-- 7 files changed, 12 insertions(+), 46 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 1b085c394..191b7575f 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1630,11 +1630,8 @@ TEST (block_store, final_vote) ASSERT_EQ (store->final_vote.count (transaction), 0); store->final_vote.put (transaction, qualified_root, nano::block_hash (2)); ASSERT_EQ (store->final_vote.count (transaction), 1); - // Clearing with incorrect root shouldn't remove - store->final_vote.clear (transaction, qualified_root.previous ()); - ASSERT_EQ (store->final_vote.count (transaction), 1); // Clearing with correct root should remove - store->final_vote.clear (transaction, qualified_root.root ()); + store->final_vote.del (transaction, qualified_root); ASSERT_EQ (store->final_vote.count (transaction), 0); } } diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 6128a1c3e..e0622e940 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -646,10 +646,10 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map { auto root_str = root_it->second.as (); auto transaction (node.node->store.tx_begin_write ()); - nano::root root; + nano::qualified_root root; if (!root.decode_hex (root_str)) { - node.node->store.final_vote.clear (transaction, root); + node.node->store.final_vote.del (transaction, root); std::cout << "Successfully cleared final votes" << std::endl; } else diff --git a/nano/store/final_vote.hpp b/nano/store/final_vote.hpp index 7d7f2b8cd..8e692d404 100644 --- a/nano/store/final_vote.hpp +++ b/nano/store/final_vote.hpp @@ -23,9 +23,8 @@ public: public: virtual bool put (store::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) = 0; virtual std::optional get (store::transaction const & transaction_a, nano::qualified_root const & qualified_root_a) = 0; - virtual void del (store::write_transaction const & transaction_a, nano::root const & root_a) = 0; + virtual void del (store::write_transaction const & transaction_a, nano::qualified_root const & root_a) = 0; virtual size_t count (store::transaction const & transaction_a) const = 0; - virtual void clear (store::write_transaction const &, nano::root const &) = 0; virtual void clear (store::write_transaction const &) = 0; virtual iterator begin (store::transaction const & transaction_a, nano::qualified_root const & root_a) const = 0; virtual iterator begin (store::transaction const & transaction_a) const = 0; diff --git a/nano/store/lmdb/final_vote.cpp b/nano/store/lmdb/final_vote.cpp index 5c88217e8..547dd600b 100644 --- a/nano/store/lmdb/final_vote.cpp +++ b/nano/store/lmdb/final_vote.cpp @@ -35,19 +35,10 @@ std::optional nano::store::lmdb::final_vote::get (store::trans return final_vote_hash; } -void nano::store::lmdb::final_vote::del (store::write_transaction const & transaction, nano::root const & root) +void nano::store::lmdb::final_vote::del (store::write_transaction const & transaction, nano::qualified_root const & root) { - std::vector final_vote_qualified_roots; - for (auto i = begin (transaction, nano::qualified_root{ root.raw, 0 }), n = end (transaction); i != n && nano::qualified_root{ i->first }.root () == root; ++i) - { - final_vote_qualified_roots.push_back (i->first); - } - - for (auto & final_vote_qualified_root : final_vote_qualified_roots) - { - auto status = store.del (transaction, tables::final_votes, final_vote_qualified_root); - store.release_assert_success (status); - } + auto status = store.del (transaction, tables::final_votes, root); + store.release_assert_success (status); } size_t nano::store::lmdb::final_vote::count (store::transaction const & transaction_a) const @@ -55,11 +46,6 @@ size_t nano::store::lmdb::final_vote::count (store::transaction const & transact return store.count (transaction_a, tables::final_votes); } -void nano::store::lmdb::final_vote::clear (store::write_transaction const & transaction_a, nano::root const & root_a) -{ - del (transaction_a, root_a); -} - void nano::store::lmdb::final_vote::clear (store::write_transaction const & transaction_a) { store.drop (transaction_a, nano::tables::final_votes); diff --git a/nano/store/lmdb/final_vote.hpp b/nano/store/lmdb/final_vote.hpp index 4d3c05123..193cb6e71 100644 --- a/nano/store/lmdb/final_vote.hpp +++ b/nano/store/lmdb/final_vote.hpp @@ -19,9 +19,8 @@ public: explicit final_vote (nano::store::lmdb::component & store); bool put (store::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) override; std::optional get (store::transaction const & transaction_a, nano::qualified_root const & qualified_root_a) override; - void del (store::write_transaction const & transaction_a, nano::root const & root_a) override; + void del (store::write_transaction const & transaction_a, nano::qualified_root const & root_a) override; size_t count (store::transaction const & transaction_a) const override; - void clear (store::write_transaction const & transaction_a, nano::root const & root_a) override; void clear (store::write_transaction const & transaction_a) override; iterator begin (store::transaction const & transaction_a, nano::qualified_root const & root_a) const override; iterator begin (store::transaction const & transaction_a) const override; diff --git a/nano/store/rocksdb/final_vote.cpp b/nano/store/rocksdb/final_vote.cpp index 7f20d850a..0875c11b7 100644 --- a/nano/store/rocksdb/final_vote.cpp +++ b/nano/store/rocksdb/final_vote.cpp @@ -36,19 +36,10 @@ std::optional nano::store::rocksdb::final_vote::get (store::tr return final_vote_hash; } -void nano::store::rocksdb::final_vote::del (store::write_transaction const & transaction, nano::root const & root) +void nano::store::rocksdb::final_vote::del (store::write_transaction const & transaction, nano::qualified_root const & root) { - std::vector final_vote_qualified_roots; - for (auto i = begin (transaction, nano::qualified_root{ root.raw, 0 }), n = end (transaction); i != n && nano::qualified_root{ i->first }.root () == root; ++i) - { - final_vote_qualified_roots.push_back (i->first); - } - - for (auto & final_vote_qualified_root : final_vote_qualified_roots) - { - auto status = store.del (transaction, tables::final_votes, final_vote_qualified_root); - store.release_assert_success (status); - } + auto status = store.del (transaction, tables::final_votes, root); + store.release_assert_success (status); } size_t nano::store::rocksdb::final_vote::count (store::transaction const & transaction_a) const @@ -56,11 +47,6 @@ size_t nano::store::rocksdb::final_vote::count (store::transaction const & trans return store.count (transaction_a, tables::final_votes); } -void nano::store::rocksdb::final_vote::clear (store::write_transaction const & transaction_a, nano::root const & root_a) -{ - del (transaction_a, root_a); -} - void nano::store::rocksdb::final_vote::clear (store::write_transaction const & transaction_a) { store.drop (transaction_a, nano::tables::final_votes); diff --git a/nano/store/rocksdb/final_vote.hpp b/nano/store/rocksdb/final_vote.hpp index 8ca661178..04b470fed 100644 --- a/nano/store/rocksdb/final_vote.hpp +++ b/nano/store/rocksdb/final_vote.hpp @@ -17,9 +17,8 @@ public: explicit final_vote (nano::store::rocksdb::component & store); bool put (store::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) override; std::optional get (store::transaction const & transaction_a, nano::qualified_root const & qualified_root_a) override; - void del (store::write_transaction const & transaction_a, nano::root const & root_a) override; + void del (store::write_transaction const & transaction_a, nano::qualified_root const & root_a) override; size_t count (store::transaction const & transaction_a) const override; - void clear (store::write_transaction const & transaction_a, nano::root const & root_a) override; void clear (store::write_transaction const & transaction_a) override; iterator begin (store::transaction const & transaction_a, nano::qualified_root const & root_a) const override; iterator begin (store::transaction const & transaction_a) const override;