Removing block_store::account_calculated as this value is cached in sideband.

This commit is contained in:
Colin LeMahieu 2023-09-14 13:26:14 +01:00
commit dcb4dbc34b
No known key found for this signature in database
GPG key ID: 43708520C8DFB938
8 changed files with 30 additions and 53 deletions

View file

@ -112,7 +112,7 @@ TEST (ledger, process_send)
ASSERT_TRUE (store.frontier.get (transaction, info1->head).is_zero ());
ASSERT_EQ (nano::dev::genesis_key.pub, store.frontier.get (transaction, hash1));
ASSERT_EQ (nano::process_result::progress, return1.code);
ASSERT_EQ (nano::dev::genesis_key.pub, store.block.account_calculated (*send));
ASSERT_EQ (nano::dev::genesis_key.pub, store.block.account (*send));
ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub));
ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_receivable (transaction, key2.pub));
auto info2 = ledger.account_info (transaction, nano::dev::genesis_key.pub);
@ -141,7 +141,7 @@ TEST (ledger, process_send)
ASSERT_EQ (1, open->sideband ().height);
ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash2));
ASSERT_EQ (nano::process_result::progress, return2.code);
ASSERT_EQ (key2.pub, store.block.account_calculated (*open));
ASSERT_EQ (key2.pub, store.block.account (*open));
ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash2));
ASSERT_EQ (key2.pub, store.frontier.get (transaction, hash2));
ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_balance (transaction, key2.pub));
@ -225,7 +225,7 @@ TEST (ledger, process_receive)
nano::block_hash hash2 (open->hash ());
auto return1 = ledger.process (transaction, *open);
ASSERT_EQ (nano::process_result::progress, return1.code);
ASSERT_EQ (key2.pub, store.block.account_calculated (*open));
ASSERT_EQ (key2.pub, store.block.account (*open));
ASSERT_EQ (key2.pub, open->sideband ().account);
ASSERT_EQ (nano::dev::constants.genesis_amount - 50, open->sideband ().balance.number ());
ASSERT_EQ (1, open->sideband ().height);
@ -258,7 +258,7 @@ TEST (ledger, process_receive)
ASSERT_TRUE (store.frontier.get (transaction, hash2).is_zero ());
ASSERT_EQ (key2.pub, store.frontier.get (transaction, hash4));
ASSERT_EQ (nano::process_result::progress, return2.code);
ASSERT_EQ (key2.pub, store.block.account_calculated (*receive));
ASSERT_EQ (key2.pub, store.block.account (*receive));
ASSERT_EQ (hash4, ledger.latest (transaction, key2.pub));
ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub));
ASSERT_EQ (0, ledger.account_receivable (transaction, key2.pub));
@ -525,7 +525,7 @@ TEST (ledger, representative_change)
ASSERT_TRUE (store.frontier.get (transaction, info1->head).is_zero ());
ASSERT_EQ (nano::dev::genesis_key.pub, store.frontier.get (transaction, block->hash ()));
ASSERT_EQ (nano::process_result::progress, return1.code);
ASSERT_EQ (nano::dev::genesis_key.pub, store.block.account_calculated (*block));
ASSERT_EQ (nano::dev::genesis_key.pub, store.block.account (*block));
ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub));
ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (key2.pub));
auto info2 = ledger.account_info (transaction, nano::dev::genesis_key.pub);

View file

@ -146,25 +146,6 @@ uint64_t nano::lmdb::block_store::count (nano::transaction const & transaction_a
return store.count (transaction_a, tables::blocks);
}
nano::account nano::lmdb::block_store::account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const
{
auto block (get (transaction_a, hash_a));
debug_assert (block != nullptr);
return account_calculated (*block);
}
nano::account nano::lmdb::block_store::account_calculated (nano::block const & block_a) const
{
debug_assert (block_a.has_sideband ());
nano::account result (block_a.account ());
if (result.is_zero ())
{
result = block_a.sideband ().account;
}
debug_assert (!result.is_zero ());
return result;
}
nano::store_iterator<nano::block_hash, nano::block_w_sideband> nano::lmdb::block_store::begin (nano::transaction const & transaction) const
{
return store.make_iterator<nano::block_hash, nano::block_w_sideband> (transaction, tables::blocks);

View file

@ -28,8 +28,6 @@ namespace lmdb
void del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override;
bool exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override;
uint64_t count (nano::transaction const & transaction_a) override;
nano::account account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override;
nano::account account_calculated (nano::block const & block_a) const override;
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;

View file

@ -146,25 +146,6 @@ uint64_t nano::rocksdb::block_store::count (nano::transaction const & transactio
return store.count (transaction_a, tables::blocks);
}
nano::account nano::rocksdb::block_store::account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const
{
auto block (get (transaction_a, hash_a));
debug_assert (block != nullptr);
return account_calculated (*block);
}
nano::account nano::rocksdb::block_store::account_calculated (nano::block const & block_a) const
{
debug_assert (block_a.has_sideband ());
nano::account result (block_a.account ());
if (result.is_zero ())
{
result = block_a.sideband ().account;
}
debug_assert (!result.is_zero ());
return result;
}
nano::store_iterator<nano::block_hash, nano::block_w_sideband> nano::rocksdb::block_store::begin (nano::transaction const & transaction) const
{
return store.make_iterator<nano::block_hash, nano::block_w_sideband> (transaction, tables::blocks);

View file

@ -28,8 +28,6 @@ namespace rocksdb
void del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override;
bool exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override;
uint64_t count (nano::transaction const & transaction_a) override;
nano::account account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override;
nano::account account_calculated (nano::block const & block_a) const override;
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;

View file

@ -1047,7 +1047,7 @@ nano::account nano::ledger::account_safe (nano::transaction const & transaction_
auto block (store.block.get (transaction_a, hash_a));
if (block != nullptr)
{
return store.block.account_calculated (*block);
return store.block.account (*block);
}
else
{
@ -1057,12 +1057,12 @@ nano::account nano::ledger::account_safe (nano::transaction const & transaction_
}
}
nano::account nano::ledger::account_safe (const nano::transaction & transaction, const nano::block_hash & hash) const
nano::account nano::ledger::account_safe (nano::transaction const & transaction, nano::block_hash const & hash) const
{
auto block = store.block.get (transaction, hash);
if (block)
{
return store.block.account_calculated (*block);
return store.block.account (*block);
}
else
{

View file

@ -106,6 +106,25 @@ bool nano::write_transaction::contains (nano::tables table_a) const
return impl->contains (table_a);
}
nano::account nano::block_store::account (nano::block const & block) const
{
debug_assert (block.has_sideband ());
nano::account result (block.account ());
if (result.is_zero ())
{
result = block.sideband ().account;
}
debug_assert (!result.is_zero ());
return result;
}
nano::account nano::block_store::account (nano::transaction const & transaction, nano::block_hash const & hash) const
{
auto block = get (transaction, hash);
debug_assert (block != nullptr);
return account (*block);
}
// clang-format off
nano::store::store (
nano::block_store & block_store_a,
@ -179,4 +198,4 @@ std::optional<nano::confirmation_height_info> nano::confirmation_height_store::g
{
return std::nullopt;
}
}
}

View file

@ -753,8 +753,8 @@ public:
virtual void del (nano::write_transaction const &, nano::block_hash const &) = 0;
virtual bool exists (nano::transaction const &, nano::block_hash const &) = 0;
virtual uint64_t count (nano::transaction const &) = 0;
virtual nano::account account (nano::transaction const &, nano::block_hash const &) const = 0;
virtual nano::account account_calculated (nano::block const &) const = 0;
nano::account account (nano::block const & block) const;
nano::account account (nano::transaction const & transaction, nano::block_hash const & hash) const;
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;