Refactor bank_forks_utils::load() to invoke a common process_blockstore_from_root()

This commit is contained in:
Michael Vines
2022-03-05 15:19:54 +01:00
parent c2ce152be8
commit 3d4bf1d00a
2 changed files with 60 additions and 58 deletions

View File

@ -64,7 +64,7 @@ pub fn load(
accounts_package_sender: AccountsPackageSender, accounts_package_sender: AccountsPackageSender,
accounts_update_notifier: Option<AccountsUpdateNotifier>, accounts_update_notifier: Option<AccountsUpdateNotifier>,
) -> LoadResult { ) -> LoadResult {
if let Some(snapshot_config) = snapshot_config { let snapshot_present = if let Some(snapshot_config) = snapshot_config {
info!( info!(
"Initializing bank snapshot path: {}", "Initializing bank snapshot path: {}",
snapshot_config.bank_snapshots_dir.display() snapshot_config.bank_snapshots_dir.display()
@ -78,25 +78,26 @@ pub fn load(
) )
.is_some() .is_some()
{ {
return load_from_snapshot( true
genesis_config,
blockstore,
account_paths,
shrink_paths,
snapshot_config,
process_options,
transaction_status_sender,
cache_block_meta_sender,
accounts_package_sender,
accounts_update_notifier,
);
} else { } else {
info!("No snapshot package available; will load from genesis"); info!("No snapshot package available; will load from genesis");
false
} }
} else { } else {
info!("Snapshots disabled; will load from genesis"); info!("Snapshots disabled; will load from genesis");
} false
};
let (bank_forks, last_full_snapshot_slot, starting_snapshot_hashes) = if snapshot_present {
bank_forks_from_snapshot(
genesis_config,
account_paths,
shrink_paths,
snapshot_config.as_ref().unwrap(),
&process_options,
accounts_update_notifier,
)
} else {
if process_options if process_options
.accounts_db_config .accounts_db_config
.as_ref() .as_ref()
@ -108,15 +109,20 @@ pub fn load(
} }
info!("Processing ledger from genesis"); info!("Processing ledger from genesis");
(
let bank_forks = blockstore_processor::process_blockstore_for_bank_0( blockstore_processor::process_blockstore_for_bank_0(
genesis_config, genesis_config,
blockstore, blockstore,
account_paths, account_paths,
&process_options, &process_options,
cache_block_meta_sender, cache_block_meta_sender,
accounts_update_notifier, accounts_update_notifier,
); ),
None,
None,
)
};
to_loadresult( to_loadresult(
blockstore_processor::process_blockstore_from_root( blockstore_processor::process_blockstore_from_root(
blockstore, blockstore,
@ -126,25 +132,21 @@ pub fn load(
cache_block_meta_sender, cache_block_meta_sender,
snapshot_config, snapshot_config,
accounts_package_sender, accounts_package_sender,
None, last_full_snapshot_slot,
), ),
None, starting_snapshot_hashes,
) )
} }
#[allow(clippy::too_many_arguments)] #[allow(clippy::too_many_arguments)]
fn load_from_snapshot( fn bank_forks_from_snapshot(
genesis_config: &GenesisConfig, genesis_config: &GenesisConfig,
blockstore: &Blockstore,
account_paths: Vec<PathBuf>, account_paths: Vec<PathBuf>,
shrink_paths: Option<Vec<PathBuf>>, shrink_paths: Option<Vec<PathBuf>>,
snapshot_config: &SnapshotConfig, snapshot_config: &SnapshotConfig,
process_options: ProcessOptions, process_options: &ProcessOptions,
transaction_status_sender: Option<&TransactionStatusSender>,
cache_block_meta_sender: Option<&CacheBlockMetaSender>,
accounts_package_sender: AccountsPackageSender,
accounts_update_notifier: Option<AccountsUpdateNotifier>, accounts_update_notifier: Option<AccountsUpdateNotifier>,
) -> LoadResult { ) -> (BankForks, Option<Slot>, Option<StartingSnapshotHashes>) {
// Fail hard here if snapshot fails to load, don't silently continue // Fail hard here if snapshot fails to load, don't silently continue
if account_paths.is_empty() { if account_paths.is_empty() {
error!("Account paths not present when booting from snapshot"); error!("Account paths not present when booting from snapshot");
@ -191,23 +193,15 @@ fn load_from_snapshot(
), ),
} }
}); });
let starting_snapshot_hashes = StartingSnapshotHashes { let starting_snapshot_hashes = Some(StartingSnapshotHashes {
full: starting_full_snapshot_hash, full: starting_full_snapshot_hash,
incremental: starting_incremental_snapshot_hash, incremental: starting_incremental_snapshot_hash,
}; });
let last_full_snapshot_slot = Some(full_snapshot_archive_info.slot());
let bank_forks = BankForks::new(deserialized_bank); (
to_loadresult( BankForks::new(deserialized_bank),
blockstore_processor::process_blockstore_from_root( last_full_snapshot_slot,
blockstore, starting_snapshot_hashes,
bank_forks,
&process_options,
transaction_status_sender,
cache_block_meta_sender,
Some(snapshot_config),
accounts_package_sender,
Some(full_snapshot_archive_info.slot()),
),
Some(starting_snapshot_hashes),
) )
} }

View File

@ -571,9 +571,17 @@ pub fn test_process_blockstore(
blockstore: &Blockstore, blockstore: &Blockstore,
opts: ProcessOptions, opts: ProcessOptions,
) -> BlockstoreProcessorInner { ) -> BlockstoreProcessorInner {
let (bank_forks, ..) = crate::bank_forks_utils::load_bank_forks(
genesis_config,
blockstore,
Vec::new(),
None,
None,
&opts,
None,
None,
);
let (accounts_package_sender, _) = unbounded(); let (accounts_package_sender, _) = unbounded();
let bank_forks =
process_blockstore_for_bank_0(genesis_config, blockstore, Vec::new(), &opts, None, None);
process_blockstore_from_root( process_blockstore_from_root(
blockstore, blockstore,
bank_forks, bank_forks,