Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit cb7a6c4

Browse files
committed
Add BankWithScheduler for upcoming scheduler code
1 parent c0fbfc6 commit cb7a6c4

File tree

11 files changed

+284
-102
lines changed

11 files changed

+284
-102
lines changed

core/benches/banking_stage.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ use {
3737
},
3838
solana_poh::poh_recorder::{create_test_recorder, WorkingBankEntry},
3939
solana_runtime::{
40-
bank::Bank, bank_forks::BankForks, prioritization_fee_cache::PrioritizationFeeCache,
40+
bank::Bank, bank_forks::BankForks, installed_scheduler_pool::BankWithScheduler,
41+
prioritization_fee_cache::PrioritizationFeeCache,
4142
},
4243
solana_sdk::{
4344
genesis_config::GenesisConfig,
@@ -398,6 +399,7 @@ fn simulate_process_entries(
398399
num_accounts: usize,
399400
) {
400401
let bank = Arc::new(Bank::new_for_benches(genesis_config));
402+
let bank = BankWithScheduler::new_without_scheduler(bank);
401403

402404
for i in 0..(num_accounts / 2) {
403405
bank.transfer(initial_lamports, mint_keypair, &keypairs[i * 2].pubkey())

core/src/replay_stage.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ use {
6161
bank::{bank_hash_details, Bank, NewBankOptions},
6262
bank_forks::{BankForks, MAX_ROOT_DISTANCE_FOR_VOTE_ONLY},
6363
commitment::BlockCommitmentCache,
64+
installed_scheduler_pool::BankWithScheduler,
6465
prioritization_fee_cache::PrioritizationFeeCache,
6566
},
6667
solana_sdk::{
@@ -1988,7 +1989,7 @@ impl ReplayStage {
19881989

19891990
#[allow(clippy::too_many_arguments)]
19901991
fn replay_blockstore_into_bank(
1991-
bank: &Arc<Bank>,
1992+
bank: &BankWithScheduler,
19921993
blockstore: &Blockstore,
19931994
replay_stats: &RwLock<ReplaySlotStats>,
19941995
replay_progress: &RwLock<ConfirmationProgress>,
@@ -2599,7 +2600,11 @@ impl ReplayStage {
25992600
return replay_result;
26002601
}
26012602

2602-
let bank = bank_forks.read().unwrap().get(bank_slot).unwrap();
2603+
let bank = bank_forks
2604+
.read()
2605+
.unwrap()
2606+
.get_with_scheduler(bank_slot)
2607+
.unwrap();
26032608
let parent_slot = bank.parent_slot();
26042609
let (num_blocks_on_fork, num_dropped_blocks_on_fork) = {
26052610
let stats = progress_lock
@@ -2687,7 +2692,11 @@ impl ReplayStage {
26872692
debug!("bank_slot {:?} is marked dead", bank_slot);
26882693
replay_result.is_slot_dead = true;
26892694
} else {
2690-
let bank = bank_forks.read().unwrap().get(bank_slot).unwrap();
2695+
let bank = bank_forks
2696+
.read()
2697+
.unwrap()
2698+
.get_with_scheduler(bank_slot)
2699+
.unwrap();
26912700
let parent_slot = bank.parent_slot();
26922701
let prev_leader_slot = progress.get_bank_prev_leader_slot(&bank);
26932702
let (num_blocks_on_fork, num_dropped_blocks_on_fork) = {
@@ -2768,7 +2777,11 @@ impl ReplayStage {
27682777
}
27692778

27702779
let bank_slot = replay_result.bank_slot;
2771-
let bank = &bank_forks.read().unwrap().get(bank_slot).unwrap();
2780+
let bank = &bank_forks
2781+
.read()
2782+
.unwrap()
2783+
.get_with_scheduler(bank_slot)
2784+
.unwrap();
27722785
if let Some(replay_result) = &replay_result.replay_result {
27732786
match replay_result {
27742787
Ok(replay_tx_count) => tx_count += replay_tx_count,
@@ -2826,7 +2839,9 @@ impl ReplayStage {
28262839
);
28272840
// report cost tracker stats
28282841
cost_update_sender
2829-
.send(CostUpdate::FrozenBank { bank: bank.clone() })
2842+
.send(CostUpdate::FrozenBank {
2843+
bank: bank.clone_without_scheduler(),
2844+
})
28302845
.unwrap_or_else(|err| {
28312846
warn!("cost_update_sender failed sending bank stats: {:?}", err)
28322847
});
@@ -2887,7 +2902,7 @@ impl ReplayStage {
28872902
if let Some(sender) = bank_notification_sender {
28882903
sender
28892904
.sender
2890-
.send(BankNotification::Frozen(bank.clone()))
2905+
.send(BankNotification::Frozen(bank.clone_without_scheduler()))
28912906
.unwrap_or_else(|err| warn!("bank_notification_sender failed: {:?}", err));
28922907
}
28932908
blockstore_processor::cache_block_meta(bank, cache_block_meta_sender);
@@ -4746,7 +4761,7 @@ pub(crate) mod tests {
47464761
assert_eq!(bank0.tick_height(), bank0.max_tick_height());
47474762
let bank1 = Bank::new_from_parent(bank0, &Pubkey::default(), 1);
47484763
bank_forks.write().unwrap().insert(bank1);
4749-
let bank1 = bank_forks.read().unwrap().get(1).unwrap();
4764+
let bank1 = bank_forks.read().unwrap().get_with_scheduler(1).unwrap();
47504765
let bank1_progress = progress
47514766
.entry(bank1.slot())
47524767
.or_insert_with(|| ForkProgress::new(bank1.last_blockhash(), None, None, 0, 0));

core/tests/epoch_accounts_hash.rs

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -599,18 +599,20 @@ fn test_epoch_accounts_hash_and_warping() {
599599
);
600600
// flush the write cache so warping can calculate the accounts hash from storages
601601
bank.force_flush_accounts_cache();
602-
let bank = bank_forks.write().unwrap().insert(Bank::warp_from_parent(
603-
bank,
604-
&Pubkey::default(),
605-
eah_stop_slot_in_next_epoch,
606-
CalcAccountsHashDataSource::Storages,
607-
));
602+
let bank = bank_forks
603+
.write()
604+
.unwrap()
605+
.insert_without_scheduler(Bank::warp_from_parent(
606+
bank,
607+
&Pubkey::default(),
608+
eah_stop_slot_in_next_epoch,
609+
CalcAccountsHashDataSource::Storages,
610+
));
608611
let slot = bank.slot().checked_add(1).unwrap();
609-
let bank =
610-
bank_forks
611-
.write()
612-
.unwrap()
613-
.insert(Bank::new_from_parent(bank, &Pubkey::default(), slot));
612+
let bank = bank_forks
613+
.write()
614+
.unwrap()
615+
.insert_without_scheduler(Bank::new_from_parent(bank, &Pubkey::default(), slot));
614616
bank_forks.write().unwrap().set_root(
615617
bank.slot(),
616618
&test_environment
@@ -634,18 +636,20 @@ fn test_epoch_accounts_hash_and_warping() {
634636
epoch_schedule.get_first_slot_in_epoch(bank.epoch() + 1) + eah_start_offset;
635637
// flush the write cache so warping can calculate the accounts hash from storages
636638
bank.force_flush_accounts_cache();
637-
let bank = bank_forks.write().unwrap().insert(Bank::warp_from_parent(
638-
bank,
639-
&Pubkey::default(),
640-
eah_start_slot_in_next_epoch,
641-
CalcAccountsHashDataSource::Storages,
642-
));
639+
let bank = bank_forks
640+
.write()
641+
.unwrap()
642+
.insert_without_scheduler(Bank::warp_from_parent(
643+
bank,
644+
&Pubkey::default(),
645+
eah_start_slot_in_next_epoch,
646+
CalcAccountsHashDataSource::Storages,
647+
));
643648
let slot = bank.slot().checked_add(1).unwrap();
644-
let bank =
645-
bank_forks
646-
.write()
647-
.unwrap()
648-
.insert(Bank::new_from_parent(bank, &Pubkey::default(), slot));
649+
let bank = bank_forks
650+
.write()
651+
.unwrap()
652+
.insert_without_scheduler(Bank::new_from_parent(bank, &Pubkey::default(), slot));
649653
bank_forks.write().unwrap().set_root(
650654
bank.slot(),
651655
&test_environment

0 commit comments

Comments
 (0)