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_update_notifier: Option<AccountsUpdateNotifier>,
) -> LoadResult {
if let Some(snapshot_config) = snapshot_config {
let snapshot_present = if let Some(snapshot_config) = snapshot_config {
info!(
"Initializing bank snapshot path: {}",
snapshot_config.bank_snapshots_dir.display()
@ -78,45 +78,51 @@ pub fn load(
)
.is_some()
{
return load_from_snapshot(
genesis_config,
blockstore,
account_paths,
shrink_paths,
snapshot_config,
process_options,
transaction_status_sender,
cache_block_meta_sender,
accounts_package_sender,
accounts_update_notifier,
);
true
} else {
info!("No snapshot package available; will load from genesis");
false
}
} else {
info!("Snapshots disabled; will load from genesis");
}
false
};
if process_options
.accounts_db_config
.as_ref()
.and_then(|config| config.filler_account_count)
.unwrap_or_default()
> 0
{
panic!("filler accounts specified, but not loading from snapshot");
}
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
.accounts_db_config
.as_ref()
.and_then(|config| config.filler_account_count)
.unwrap_or_default()
> 0
{
panic!("filler accounts specified, but not loading from snapshot");
}
info!("Processing ledger from genesis");
info!("Processing ledger from genesis");
(
blockstore_processor::process_blockstore_for_bank_0(
genesis_config,
blockstore,
account_paths,
&process_options,
cache_block_meta_sender,
accounts_update_notifier,
),
None,
None,
)
};
let bank_forks = blockstore_processor::process_blockstore_for_bank_0(
genesis_config,
blockstore,
account_paths,
&process_options,
cache_block_meta_sender,
accounts_update_notifier,
);
to_loadresult(
blockstore_processor::process_blockstore_from_root(
blockstore,
@ -126,25 +132,21 @@ pub fn load(
cache_block_meta_sender,
snapshot_config,
accounts_package_sender,
None,
last_full_snapshot_slot,
),
None,
starting_snapshot_hashes,
)
}
#[allow(clippy::too_many_arguments)]
fn load_from_snapshot(
fn bank_forks_from_snapshot(
genesis_config: &GenesisConfig,
blockstore: &Blockstore,
account_paths: Vec<PathBuf>,
shrink_paths: Option<Vec<PathBuf>>,
snapshot_config: &SnapshotConfig,
process_options: ProcessOptions,
transaction_status_sender: Option<&TransactionStatusSender>,
cache_block_meta_sender: Option<&CacheBlockMetaSender>,
accounts_package_sender: AccountsPackageSender,
process_options: &ProcessOptions,
accounts_update_notifier: Option<AccountsUpdateNotifier>,
) -> LoadResult {
) -> (BankForks, Option<Slot>, Option<StartingSnapshotHashes>) {
// Fail hard here if snapshot fails to load, don't silently continue
if account_paths.is_empty() {
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,
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(
blockstore_processor::process_blockstore_from_root(
blockstore,
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),
(
BankForks::new(deserialized_bank),
last_full_snapshot_slot,
starting_snapshot_hashes,
)
}

View File

@ -571,9 +571,17 @@ pub fn test_process_blockstore(
blockstore: &Blockstore,
opts: ProcessOptions,
) -> 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 bank_forks =
process_blockstore_for_bank_0(genesis_config, blockstore, Vec::new(), &opts, None, None);
process_blockstore_from_root(
blockstore,
bank_forks,