Moves impl of bank_hash_info_at() into hash_internal_state() (#29913)

This commit is contained in:
Brooks 2023-01-25 22:24:51 -05:00 committed by GitHub
parent fbb90603a9
commit 867d2581a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 33 deletions

View File

@ -4,7 +4,7 @@ use {
account_rent_state::{check_rent_state_with_account, RentState},
accounts_db::{
AccountShrinkThreshold, AccountsAddRootTiming, AccountsDb, AccountsDbConfig,
BankHashInfo, IncludeSlotInHash, LoadHint, LoadedAccount, ScanStorageResult,
IncludeSlotInHash, LoadHint, LoadedAccount, ScanStorageResult,
ACCOUNTS_DB_CONFIG_FOR_BENCHMARKS, ACCOUNTS_DB_CONFIG_FOR_TESTING,
},
accounts_index::{
@ -1067,17 +1067,6 @@ impl Accounts {
}
}
pub fn bank_hash_info_at(&self, slot: Slot) -> BankHashInfo {
let accounts_delta_hash = self.accounts_db.calculate_accounts_delta_hash(slot);
let bank_hashes = self.accounts_db.bank_hashes.read().unwrap();
let mut bank_hash_info = bank_hashes
.get(&slot)
.expect("No bank hash was found for this bank, that should not be possible")
.clone();
bank_hash_info.accounts_delta_hash = accounts_delta_hash;
bank_hash_info
}
/// This function will prevent multiple threads from modifying the same account state at the
/// same time
#[must_use]

View File

@ -6595,14 +6595,19 @@ impl Bank {
/// Hash the `accounts` HashMap. This represents a validator's interpretation
/// of the delta of the ledger since the last vote and up to now
fn hash_internal_state(&self) -> Hash {
// If there are no accounts, return the hash of the previous state and the latest blockhash
let bank_hash_info = self.rc.accounts.bank_hash_info_at(self.slot());
let slot = self.slot();
let accounts_delta_hash = self
.rc
.accounts
.accounts_db
.calculate_accounts_delta_hash(slot);
let mut signature_count_buf = [0u8; 8];
LittleEndian::write_u64(&mut signature_count_buf[..], self.signature_count());
let mut hash = hashv(&[
self.parent_hash.as_ref(),
bank_hash_info.accounts_delta_hash.0.as_ref(),
accounts_delta_hash.0.as_ref(),
&signature_count_buf,
self.last_blockhash().as_ref(),
]);
@ -6617,24 +6622,23 @@ impl Bank {
.hard_forks
.read()
.unwrap()
.get_hash_data(self.slot(), self.parent_slot());
.get_hash_data(slot, self.parent_slot());
if let Some(buf) = buf {
let hard_forked_hash = extend_and_hash(&hash, &buf);
warn!(
"hard fork at slot {} by hashing {:?}: {} => {}",
self.slot(),
buf,
hash,
hard_forked_hash
);
warn!("hard fork at slot {slot} by hashing {buf:?}: {hash} => {hard_forked_hash}");
hash = hard_forked_hash;
}
let bank_hash_stats = self
.rc
.accounts
.accounts_db
.get_bank_hash_info(slot)
.expect("No bank hash was found for this bank, that should not be possible")
.stats;
info!(
"bank frozen: {} hash: {} accounts_delta: {} signature_count: {} last_blockhash: {} capitalization: {}{}",
self.slot(),
hash,
bank_hash_info.accounts_delta_hash.0,
"bank frozen: {slot} hash: {hash} accounts_delta: {} signature_count: {} last_blockhash: {} capitalization: {}{}, stats: {bank_hash_stats:?}",
accounts_delta_hash.0,
self.signature_count(),
self.last_blockhash(),
self.capitalization(),
@ -6644,12 +6648,6 @@ impl Bank {
"".to_string()
}
);
info!(
"accounts hash slot: {} stats: {:?}",
self.slot(),
bank_hash_info.stats,
);
hash
}