Delete by qualified root only
This commit is contained in:
parent
637d4031e1
commit
7684a30045
7 changed files with 12 additions and 46 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -646,10 +646,10 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map
|
|||
{
|
||||
auto root_str = root_it->second.as<std::string> ();
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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<nano::block_hash> 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;
|
||||
|
|
|
|||
|
|
@ -35,19 +35,10 @@ std::optional<nano::block_hash> 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<nano::qualified_root> 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);
|
||||
|
|
|
|||
|
|
@ -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<nano::block_hash> 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;
|
||||
|
|
|
|||
|
|
@ -36,19 +36,10 @@ std::optional<nano::block_hash> 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<nano::qualified_root> 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);
|
||||
|
|
|
|||
|
|
@ -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<nano::block_hash> 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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue