Moving ::version function off of nano::store and on to nano::ledger

This commit is contained in:
Colin LeMahieu 2023-09-14 20:36:32 +01:00
commit 2d8dc01d51
No known key found for this signature in database
GPG key ID: 43708520C8DFB938
10 changed files with 28 additions and 31 deletions

View file

@ -1100,7 +1100,7 @@ TEST (mdb_block_store, sideband_height)
.work (*pool.generate (state_open->hash ()))
.build ();
ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *epoch).code);
ASSERT_EQ (nano::epoch::epoch_1, store.block.version (transaction, epoch->hash ()));
ASSERT_EQ (nano::epoch::epoch_1, ledger.version (*epoch));
auto epoch_open = builder
.state ()
.account (key2.pub)
@ -1112,7 +1112,7 @@ TEST (mdb_block_store, sideband_height)
.work (*pool.generate (key2.pub))
.build ();
ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *epoch_open).code);
ASSERT_EQ (nano::epoch::epoch_1, store.block.version (transaction, epoch_open->hash ()));
ASSERT_EQ (nano::epoch::epoch_1, ledger.version (*epoch_open));
auto state_receive = builder
.state ()
.account (key2.pub)

View file

@ -1072,7 +1072,7 @@ TEST (wallet, epoch_2_receive_propagation)
if (nano::dev::network_params.work.difficulty (*receive2) < node.network_params.work.base)
{
ASSERT_GE (nano::dev::network_params.work.difficulty (*receive2), node.network_params.work.epoch_2_receive);
ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive2->hash ()));
ASSERT_EQ (nano::epoch::epoch_2, node.ledger.version (*receive2));
ASSERT_EQ (nano::epoch::epoch_2, receive2->sideband ().source_epoch);
break;
}
@ -1125,7 +1125,7 @@ TEST (wallet, epoch_2_receive_unopened)
if (nano::dev::network_params.work.difficulty (*receive1) < node.network_params.work.base)
{
ASSERT_GE (nano::dev::network_params.work.difficulty (*receive1), node.network_params.work.epoch_2_receive);
ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive1->hash ()));
ASSERT_EQ (nano::epoch::epoch_2, node.ledger.version (*receive1));
ASSERT_EQ (nano::epoch::epoch_1, receive1->sideband ().source_epoch);
break;
}

View file

@ -1570,7 +1570,7 @@ int main (int argc, char * const * argv)
// Check link epoch version
if (sideband.details.is_receive && (!node->ledger.pruning || !node->store.pruned.exists (transaction, block->link ().as_block_hash ())))
{
if (sideband.source_epoch != node->store.block.version (transaction, block->link ().as_block_hash ()))
if (sideband.source_epoch != node->ledger.version (*block))
{
print_error_message (boost::str (boost::format ("Incorrect source epoch for block %1%\n") % hash.to_string ()));
}

View file

@ -147,17 +147,6 @@ nano::store_iterator<nano::block_hash, nano::block_w_sideband> nano::lmdb::block
return nano::store_iterator<nano::block_hash, nano::block_w_sideband> (nullptr);
}
nano::epoch nano::lmdb::block_store::version (nano::transaction const & transaction_a, nano::block_hash const & hash_a)
{
auto block = get (transaction_a, hash_a);
if (block && block->type () == nano::block_type::state)
{
return block->sideband ().details.epoch;
}
return nano::epoch::epoch_0;
}
void nano::lmdb::block_store::for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::block_hash, block_w_sideband>, nano::store_iterator<nano::block_hash, block_w_sideband>)> const & action_a) const
{
parallel_traversal<nano::uint256_t> (

View file

@ -30,7 +30,6 @@ namespace lmdb
nano::store_iterator<nano::block_hash, nano::block_w_sideband> begin (nano::transaction const & transaction_a) const override;
nano::store_iterator<nano::block_hash, nano::block_w_sideband> begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override;
nano::store_iterator<nano::block_hash, nano::block_w_sideband> end () const override;
nano::epoch version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override;
void for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::block_hash, block_w_sideband>, nano::store_iterator<nano::block_hash, block_w_sideband>)> const & action_a) const override;
// Converts a block hash to a block height
uint64_t account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override;

View file

@ -147,17 +147,6 @@ nano::store_iterator<nano::block_hash, nano::block_w_sideband> nano::rocksdb::bl
return nano::store_iterator<nano::block_hash, nano::block_w_sideband> (nullptr);
}
nano::epoch nano::rocksdb::block_store::version (nano::transaction const & transaction_a, nano::block_hash const & hash_a)
{
auto block = get (transaction_a, hash_a);
if (block && block->type () == nano::block_type::state)
{
return block->sideband ().details.epoch;
}
return nano::epoch::epoch_0;
}
void nano::rocksdb::block_store::for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::block_hash, block_w_sideband>, nano::store_iterator<nano::block_hash, block_w_sideband>)> const & action_a) const
{
parallel_traversal<nano::uint256_t> (

View file

@ -30,7 +30,6 @@ namespace rocksdb
nano::store_iterator<nano::block_hash, nano::block_w_sideband> begin (nano::transaction const & transaction_a) const override;
nano::store_iterator<nano::block_hash, nano::block_w_sideband> begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override;
nano::store_iterator<nano::block_hash, nano::block_w_sideband> end () const override;
nano::epoch version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override;
void for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::block_hash, block_w_sideband>, nano::store_iterator<nano::block_hash, block_w_sideband>)> const & action_a) const override;
// Converts a block hash to a block height
uint64_t account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override;

View file

@ -152,7 +152,7 @@ public:
}
debug_assert (!error);
auto previous_version (ledger.store.block.version (transaction, block_a.hashables.previous));
auto previous_version (ledger.version (transaction, block_a.hashables.previous));
nano::account_info new_info (block_a.hashables.previous, representative, info->open_block, balance, nano::seconds_since_epoch (), info->block_count - 1, previous_version);
ledger.update_account (transaction, block_a.hashables.account, *info, new_info);
@ -1613,6 +1613,26 @@ bool nano::ledger::bootstrap_weight_reached () const
return cache.block_count >= bootstrap_weight_max_blocks;
}
nano::epoch nano::ledger::version (nano::block const & block)
{
if (block.type () == nano::block_type::state)
{
return block.sideband ().details.epoch;
}
return nano::epoch::epoch_0;
}
nano::epoch nano::ledger::version (nano::transaction const & transaction, nano::block_hash const & hash) const
{
auto block = store.block.get (transaction, hash);
if (block == nullptr)
{
return nano::epoch::epoch_0;
}
return version (*block);
}
nano::uncemented_info::uncemented_info (nano::block_hash const & cemented_frontier, nano::block_hash const & frontier, nano::account const & account) :
cemented_frontier (cemented_frontier), frontier (frontier), account (account)
{

View file

@ -87,6 +87,8 @@ public:
std::multimap<uint64_t, uncemented_info, std::greater<>> unconfirmed_frontiers () const;
bool migrate_lmdb_to_rocksdb (boost::filesystem::path const &) const;
bool bootstrap_weight_reached () const;
static nano::epoch version (nano::block const & block);
nano::epoch version (nano::transaction const & transaction, nano::block_hash const & hash) const;
static nano::uint128_t const unit;
nano::ledger_constants & constants;
nano::store & store;

View file

@ -755,7 +755,6 @@ public:
virtual nano::store_iterator<nano::block_hash, block_w_sideband> begin (nano::transaction const &, nano::block_hash const &) const = 0;
virtual nano::store_iterator<nano::block_hash, block_w_sideband> begin (nano::transaction const &) const = 0;
virtual nano::store_iterator<nano::block_hash, block_w_sideband> end () const = 0;
virtual nano::epoch version (nano::transaction const &, nano::block_hash const &) = 0;
virtual void for_each_par (std::function<void (nano::read_transaction const &, nano::store_iterator<nano::block_hash, block_w_sideband>, nano::store_iterator<nano::block_hash, block_w_sideband>)> const & action_a) const = 0;
virtual uint64_t account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0;
};