diff --git a/accounts-db/src/accounts_db.rs b/accounts-db/src/accounts_db.rs index b1103cb17248fe..71f215fa01dc9e 100644 --- a/accounts-db/src/accounts_db.rs +++ b/accounts-db/src/accounts_db.rs @@ -7436,6 +7436,11 @@ impl AccountsDb { self.accounts_hashes.lock().unwrap().get(&slot).cloned() } + /// Get all accounts hashes + pub fn get_accounts_hashes(&self) -> HashMap { + self.accounts_hashes.lock().unwrap().clone() + } + /// Set the incremental accounts hash for `slot` /// /// returns the previous incremental accounts hash for `slot` @@ -7472,6 +7477,13 @@ impl AccountsDb { .cloned() } + /// Get all incremental accounts hashes + pub fn get_incremental_accounts_hashes( + &self, + ) -> HashMap { + self.incremental_accounts_hashes.lock().unwrap().clone() + } + /// Purge accounts hashes that are older than `last_full_snapshot_slot` /// /// Should only be called by AccountsHashVerifier, since it consumes the accounts hashes and diff --git a/core/src/accounts_hash_verifier.rs b/core/src/accounts_hash_verifier.rs index d34bf9837887da..39849253f94527 100644 --- a/core/src/accounts_hash_verifier.rs +++ b/core/src/accounts_hash_verifier.rs @@ -321,11 +321,26 @@ impl AccountsHashVerifier { else { panic!("Calculating incremental accounts hash requires a base slot"); }; - let (base_accounts_hash, base_capitalization) = accounts_package - .accounts - .accounts_db - .get_accounts_hash(base_slot) - .expect("incremental snapshot requires accounts hash and capitalization from the full snapshot it is based on"); + let accounts_db = &accounts_package.accounts.accounts_db; + let Some((base_accounts_hash, base_capitalization)) = + accounts_db.get_accounts_hash(base_slot) + else { + panic!( + "incremental snapshot requires accounts hash and capitalization \ + from the full snapshot it is based on \n\ + package: {accounts_package:?} \n\ + accounts hashes: {:?} \n\ + incremental accounts hashes: {:?} \n\ + full snapshot archives: {:?} \n\ + bank snapshots: {:?}", + accounts_db.get_accounts_hashes(), + accounts_db.get_incremental_accounts_hashes(), + snapshot_utils::get_full_snapshot_archives( + &snapshot_config.full_snapshot_archives_dir, + ), + snapshot_utils::get_bank_snapshots(&snapshot_config.bank_snapshots_dir), + ); + }; let (incremental_accounts_hash, incremental_capitalization) = Self::_calculate_incremental_accounts_hash(accounts_package, base_slot); let bank_incremental_snapshot_persistence = BankIncrementalSnapshotPersistence {