AccountsHashVerifier uses AccountsHashEnum (#30514)

This commit is contained in:
Brooks 2023-02-24 17:17:54 -05:00 committed by GitHub
parent 45a34f637b
commit 89c07d259a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 12 deletions

View File

@ -9,8 +9,7 @@ use {
solana_gossip::cluster_info::{ClusterInfo, MAX_SNAPSHOT_HASHES}, solana_gossip::cluster_info::{ClusterInfo, MAX_SNAPSHOT_HASHES},
solana_measure::{measure, measure::Measure}, solana_measure::{measure, measure::Measure},
solana_runtime::{ solana_runtime::{
accounts_hash::{AccountsHash, CalcAccountsHashConfig, HashStats}, accounts_hash::{AccountsHashEnum, CalcAccountsHashConfig, HashStats},
epoch_accounts_hash::EpochAccountsHash,
snapshot_config::SnapshotConfig, snapshot_config::SnapshotConfig,
snapshot_package::{ snapshot_package::{
self, retain_max_n_elements, AccountsPackage, AccountsPackageType, SnapshotPackage, self, retain_max_n_elements, AccountsPackage, AccountsPackageType, SnapshotPackage,
@ -209,7 +208,7 @@ impl AccountsHashVerifier {
} }
/// returns calculated accounts hash /// returns calculated accounts hash
fn calculate_and_verify_accounts_hash(accounts_package: &AccountsPackage) -> AccountsHash { fn calculate_and_verify_accounts_hash(accounts_package: &AccountsPackage) -> AccountsHashEnum {
let mut measure_hash = Measure::start("hash"); let mut measure_hash = Measure::start("hash");
let mut sort_time = Measure::start("sort_storages"); let mut sort_time = Measure::start("sort_storages");
let sorted_storages = SortedStorages::new(&accounts_package.snapshot_storages); let sorted_storages = SortedStorages::new(&accounts_package.snapshot_storages);
@ -306,21 +305,26 @@ impl AccountsHashVerifier {
"accounts_hash_verifier", "accounts_hash_verifier",
("calculate_hash", measure_hash.as_us(), i64), ("calculate_hash", measure_hash.as_us(), i64),
); );
accounts_hash accounts_hash.into()
} }
fn save_epoch_accounts_hash(accounts_package: &AccountsPackage, accounts_hash: AccountsHash) { fn save_epoch_accounts_hash(
accounts_package: &AccountsPackage,
accounts_hash: AccountsHashEnum,
) {
if accounts_package.package_type == AccountsPackageType::EpochAccountsHash { if accounts_package.package_type == AccountsPackageType::EpochAccountsHash {
let AccountsHashEnum::Full(accounts_hash) = accounts_hash else {
panic!("EAH requires a full accounts hash!");
};
info!( info!(
"saving epoch accounts hash, slot: {}, hash: {}", "saving epoch accounts hash, slot: {}, hash: {}",
accounts_package.slot, accounts_hash.0, accounts_package.slot, accounts_hash.0,
); );
let epoch_accounts_hash = EpochAccountsHash::from(accounts_hash);
accounts_package accounts_package
.accounts .accounts
.accounts_db .accounts_db
.epoch_accounts_hash_manager .epoch_accounts_hash_manager
.set_valid(epoch_accounts_hash, accounts_package.slot); .set_valid(accounts_hash.into(), accounts_package.slot);
} }
} }
@ -342,17 +346,17 @@ impl AccountsHashVerifier {
hashes: &mut Vec<(Slot, Hash)>, hashes: &mut Vec<(Slot, Hash)>,
exit: &Arc<AtomicBool>, exit: &Arc<AtomicBool>,
fault_injection_rate_slots: u64, fault_injection_rate_slots: u64,
accounts_hash: AccountsHash, accounts_hash: AccountsHashEnum,
) { ) {
if fault_injection_rate_slots != 0 if fault_injection_rate_slots != 0
&& accounts_package.slot % fault_injection_rate_slots == 0 && accounts_package.slot % fault_injection_rate_slots == 0
{ {
// For testing, publish an invalid hash to gossip. // For testing, publish an invalid hash to gossip.
let fault_hash = Self::generate_fault_hash(&accounts_hash.0); let fault_hash = Self::generate_fault_hash(accounts_hash.as_hash());
warn!("inserting fault at slot: {}", accounts_package.slot); warn!("inserting fault at slot: {}", accounts_package.slot);
hashes.push((accounts_package.slot, fault_hash)); hashes.push((accounts_package.slot, fault_hash));
} else { } else {
hashes.push((accounts_package.slot, accounts_hash.0)); hashes.push((accounts_package.slot, *accounts_hash.as_hash()));
} }
retain_max_n_elements(hashes, MAX_SNAPSHOT_HASHES); retain_max_n_elements(hashes, MAX_SNAPSHOT_HASHES);
@ -374,7 +378,7 @@ impl AccountsHashVerifier {
accounts_package: AccountsPackage, accounts_package: AccountsPackage,
snapshot_package_sender: Option<&Sender<SnapshotPackage>>, snapshot_package_sender: Option<&Sender<SnapshotPackage>>,
snapshot_config: &SnapshotConfig, snapshot_config: &SnapshotConfig,
accounts_hash: AccountsHash, accounts_hash: AccountsHashEnum,
) { ) {
if !snapshot_config.should_generate_snapshots() if !snapshot_config.should_generate_snapshots()
|| !matches!( || !matches!(
@ -388,7 +392,7 @@ impl AccountsHashVerifier {
return; return;
}; };
let snapshot_package = SnapshotPackage::new(accounts_package, accounts_hash.into()); let snapshot_package = SnapshotPackage::new(accounts_package, accounts_hash);
snapshot_package_sender snapshot_package_sender
.send(snapshot_package) .send(snapshot_package)
.expect("send snapshot package"); .expect("send snapshot package");