refactor so hash verify can be done by more callers (#17941)
This commit is contained in:
committed by
GitHub
parent
e6bbd4b3f0
commit
62e1b20e56
@ -4618,6 +4618,41 @@ impl AccountsDb {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn calculate_accounts_hash_helper_with_verify(
|
||||||
|
&self,
|
||||||
|
use_index: bool,
|
||||||
|
debug_verify: bool,
|
||||||
|
slot: Slot,
|
||||||
|
ancestors: &Ancestors,
|
||||||
|
expected_capitalization: Option<u64>,
|
||||||
|
can_cached_slot_be_unflushed: bool,
|
||||||
|
check_hash: bool,
|
||||||
|
) -> Result<(Hash, u64), BankHashVerificationError> {
|
||||||
|
let (hash, total_lamports) = self.calculate_accounts_hash_helper(
|
||||||
|
use_index,
|
||||||
|
slot,
|
||||||
|
ancestors,
|
||||||
|
check_hash,
|
||||||
|
can_cached_slot_be_unflushed,
|
||||||
|
)?;
|
||||||
|
if debug_verify {
|
||||||
|
// calculate the other way (store or non-store) and verify results match.
|
||||||
|
let (hash_other, total_lamports_other) = self.calculate_accounts_hash_helper(
|
||||||
|
!use_index,
|
||||||
|
slot,
|
||||||
|
ancestors,
|
||||||
|
check_hash,
|
||||||
|
can_cached_slot_be_unflushed,
|
||||||
|
)?;
|
||||||
|
|
||||||
|
let success = hash == hash_other
|
||||||
|
&& total_lamports == total_lamports_other
|
||||||
|
&& total_lamports == expected_capitalization.unwrap_or(total_lamports);
|
||||||
|
assert!(success, "update_accounts_hash_with_index_option mismatch. hashes: {}, {}; lamports: {}, {}; expected lamports: {:?}, using index: {}, slot: {}", hash, hash_other, total_lamports, total_lamports_other, expected_capitalization, use_index, slot);
|
||||||
|
}
|
||||||
|
Ok((hash, total_lamports))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn update_accounts_hash_with_index_option(
|
pub fn update_accounts_hash_with_index_option(
|
||||||
&self,
|
&self,
|
||||||
use_index: bool,
|
use_index: bool,
|
||||||
@ -4629,31 +4664,16 @@ impl AccountsDb {
|
|||||||
) -> (Hash, u64) {
|
) -> (Hash, u64) {
|
||||||
let check_hash = false;
|
let check_hash = false;
|
||||||
let (hash, total_lamports) = self
|
let (hash, total_lamports) = self
|
||||||
.calculate_accounts_hash_helper(
|
.calculate_accounts_hash_helper_with_verify(
|
||||||
use_index,
|
use_index,
|
||||||
|
debug_verify,
|
||||||
slot,
|
slot,
|
||||||
ancestors,
|
ancestors,
|
||||||
check_hash,
|
expected_capitalization,
|
||||||
can_cached_slot_be_unflushed,
|
can_cached_slot_be_unflushed,
|
||||||
|
check_hash,
|
||||||
)
|
)
|
||||||
.unwrap(); // unwrap here will never fail since check_hash = false
|
.unwrap(); // unwrap here will never fail since check_hash = false
|
||||||
if debug_verify {
|
|
||||||
// calculate the other way (store or non-store) and verify results match.
|
|
||||||
let (hash_other, total_lamports_other) = self
|
|
||||||
.calculate_accounts_hash_helper(
|
|
||||||
!use_index,
|
|
||||||
slot,
|
|
||||||
ancestors,
|
|
||||||
check_hash,
|
|
||||||
can_cached_slot_be_unflushed,
|
|
||||||
)
|
|
||||||
.unwrap(); // unwrap here will never fail since check_hash = false
|
|
||||||
|
|
||||||
let success = hash == hash_other
|
|
||||||
&& total_lamports == total_lamports_other
|
|
||||||
&& total_lamports == expected_capitalization.unwrap_or(total_lamports);
|
|
||||||
assert!(success, "update_accounts_hash_with_index_option mismatch. hashes: {}, {}; lamports: {}, {}; expected lamports: {:?}, using index: {}, slot: {}", hash, hash_other, total_lamports, total_lamports_other, expected_capitalization, use_index, slot);
|
|
||||||
}
|
|
||||||
let mut bank_hashes = self.bank_hashes.write().unwrap();
|
let mut bank_hashes = self.bank_hashes.write().unwrap();
|
||||||
let mut bank_hash_info = bank_hashes.get_mut(&slot).unwrap();
|
let mut bank_hash_info = bank_hashes.get_mut(&slot).unwrap();
|
||||||
bank_hash_info.snapshot_hash = hash;
|
bank_hash_info.snapshot_hash = hash;
|
||||||
|
Reference in New Issue
Block a user