diff --git a/src/bank.rs b/src/bank.rs index ad0f31dabc..f222d22aaf 100644 --- a/src/bank.rs +++ b/src/bank.rs @@ -130,7 +130,7 @@ impl Default for Bank { last_id_queue: RwLock::new(LastIdQueue::default()), status_cache: RwLock::new(BankStatusCache::default()), confirmation_time: AtomicUsize::new(std::usize::MAX), - leader_scheduler: Arc::new(RwLock::new(Default::default())), + leader_scheduler: Arc::new(RwLock::new(LeaderScheduler::default())), subscriptions: RwLock::new(Box::new(Arc::new(LocalSubscriptions::default()))), } } @@ -139,21 +139,20 @@ impl Default for Bank { impl Bank { pub fn new_with_leader_scheduler_config( genesis_block: &GenesisBlock, - leader_scheduler_config_option: Option<&LeaderSchedulerConfig>, + leader_scheduler_config: &LeaderSchedulerConfig, ) -> Self { let mut bank = Self::default(); - if let Some(leader_scheduler_config) = leader_scheduler_config_option { - bank.leader_scheduler = - Arc::new(RwLock::new(LeaderScheduler::new(leader_scheduler_config))); - } + bank.leader_scheduler = + Arc::new(RwLock::new(LeaderScheduler::new(leader_scheduler_config))); bank.process_genesis_block(genesis_block); bank.add_builtin_programs(); bank } pub fn new(genesis_block: &GenesisBlock) -> Self { - Self::new_with_leader_scheduler_config(genesis_block, None) + Self::new_with_leader_scheduler_config(genesis_block, &LeaderSchedulerConfig::default()) } + pub fn set_subscriptions(&self, subscriptions: Box>) { let mut sub = self.subscriptions.write().unwrap(); *sub = subscriptions diff --git a/src/fullnode.rs b/src/fullnode.rs index 8aa3974345..bed88c256c 100644 --- a/src/fullnode.rs +++ b/src/fullnode.rs @@ -125,7 +125,7 @@ impl Fullnode { db_ledger, ledger_signal_sender, ledger_signal_receiver, - ) = Self::new_bank_from_ledger(ledger_path, Some(&config.leader_scheduler_config)); + ) = Self::new_bank_from_ledger(ledger_path, &config.leader_scheduler_config); info!("node info: {:?}", node.info); info!("node entrypoint_info: {:?}", entrypoint_info_option); @@ -480,7 +480,7 @@ impl Fullnode { pub fn new_bank_from_ledger( ledger_path: &str, - leader_scheduler_config: Option<&LeaderSchedulerConfig>, + leader_scheduler_config: &LeaderSchedulerConfig, ) -> (Bank, u64, Hash, DbLedger, SyncSender, Receiver) { let (db_ledger, ledger_signal_sender, ledger_signal_receiver) = DbLedger::open_with_signal(ledger_path) @@ -829,8 +829,10 @@ mod tests { // Close the validator so that rocksdb has locks available validator_exit(); - let (bank, entry_height, _, _, _, _) = - Fullnode::new_bank_from_ledger(&validator_ledger_path, None); + let (bank, entry_height, _, _, _, _) = Fullnode::new_bank_from_ledger( + &validator_ledger_path, + &LeaderSchedulerConfig::default(), + ); assert!( bank.tick_height() diff --git a/src/leader_scheduler.rs b/src/leader_scheduler.rs index da7584953b..c2dbbe39dc 100644 --- a/src/leader_scheduler.rs +++ b/src/leader_scheduler.rs @@ -523,8 +523,7 @@ pub mod tests { let num_vote_account_tokens = 1; let (genesis_block, mint_keypair) = GenesisBlock::new(10_000); info!("bootstrap_leader_id: {}", genesis_block.bootstrap_leader_id); - let bank = - Bank::new_with_leader_scheduler_config(&genesis_block, Some(&leader_scheduler_config)); + let bank = Bank::new_with_leader_scheduler_config(&genesis_block, &leader_scheduler_config); let mut validators = vec![]; let last_id = genesis_block.last_id(); for i in 0..num_validators { @@ -652,8 +651,7 @@ pub mod tests { let active_window_length = 1000; let leader_scheduler_config = LeaderSchedulerConfig::new(100, 100, active_window_length); let (genesis_block, mint_keypair) = GenesisBlock::new_with_leader(10000, leader_id, 500); - let bank = - Bank::new_with_leader_scheduler_config(&genesis_block, Some(&leader_scheduler_config)); + let bank = Bank::new_with_leader_scheduler_config(&genesis_block, &leader_scheduler_config); let bootstrap_ids = to_hashset_owned(&vec![genesis_block.bootstrap_leader_id]); @@ -971,8 +969,7 @@ pub mod tests { + ((((num_validators + 1) / 2) * (num_validators + 1)) + (num_vote_account_tokens * num_validators)) as u64, ); - let bank = - Bank::new_with_leader_scheduler_config(&genesis_block, Some(&leader_scheduler_config)); + let bank = Bank::new_with_leader_scheduler_config(&genesis_block, &leader_scheduler_config); let mut validators = vec![]; let last_id = genesis_block.last_id(); for i in 0..num_validators { @@ -1042,8 +1039,7 @@ pub mod tests { let active_window_length = 1000; let (genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(10000, leader_id, 500); let leader_scheduler_config = LeaderSchedulerConfig::new(100, 100, active_window_length); - let bank = - Bank::new_with_leader_scheduler_config(&genesis_block, Some(&leader_scheduler_config)); + let bank = Bank::new_with_leader_scheduler_config(&genesis_block, &leader_scheduler_config); // Bootstrap leader should be in the active set even without explicit votes { @@ -1113,8 +1109,7 @@ pub mod tests { // Check that the generate_schedule() function is being called by the // update_tick_height() function at the correct entry heights. let (genesis_block, _) = GenesisBlock::new(10_000); - let bank = - Bank::new_with_leader_scheduler_config(&genesis_block, Some(&leader_scheduler_config)); + let bank = Bank::new_with_leader_scheduler_config(&genesis_block, &leader_scheduler_config); let mut leader_scheduler = bank.leader_scheduler.write().unwrap(); info!( "bootstrap_leader_id: {:?}", @@ -1268,8 +1263,7 @@ pub mod tests { // Create mint and bank let (genesis_block, mint_keypair) = GenesisBlock::new_with_leader(10_000, bootstrap_leader_id, BOOTSTRAP_LEADER_TOKENS); - let bank = - Bank::new_with_leader_scheduler_config(&genesis_block, Some(&leader_scheduler_config)); + let bank = Bank::new_with_leader_scheduler_config(&genesis_block, &leader_scheduler_config); let last_id = genesis_block.last_id(); let initial_vote_height = 1; diff --git a/src/replay_stage.rs b/src/replay_stage.rs index 8f10032988..c81b5578b0 100644 --- a/src/replay_stage.rs +++ b/src/replay_stage.rs @@ -416,7 +416,7 @@ mod test { { // Set up the bank let (bank, _entry_height, last_entry_id, db_ledger, l_sender, l_receiver) = - Fullnode::new_bank_from_ledger(&my_ledger_path, Some(&leader_scheduler_config)); + Fullnode::new_bank_from_ledger(&my_ledger_path, &leader_scheduler_config); // Set up the replay stage let (rotation_sender, rotation_receiver) = channel(); @@ -520,7 +520,7 @@ mod test { let (to_leader_sender, _) = channel(); { let (bank, entry_height, last_entry_id, db_ledger, l_sender, l_receiver) = - Fullnode::new_bank_from_ledger(&my_ledger_path, None); + Fullnode::new_bank_from_ledger(&my_ledger_path, &LeaderSchedulerConfig::default()); let bank = Arc::new(bank); let db_ledger = Arc::new(db_ledger); @@ -629,7 +629,7 @@ mod test { let exit = Arc::new(AtomicBool::new(false)); { let (bank, _entry_height, last_entry_id, db_ledger, l_sender, l_receiver) = - Fullnode::new_bank_from_ledger(&my_ledger_path, Some(&leader_scheduler_config)); + Fullnode::new_bank_from_ledger(&my_ledger_path, &leader_scheduler_config); let meta = db_ledger .meta() diff --git a/tests/multinode.rs b/tests/multinode.rs index edf91a2195..44330bac1f 100644 --- a/tests/multinode.rs +++ b/tests/multinode.rs @@ -1018,7 +1018,8 @@ fn test_leader_to_validator_transition() { leader_exit(); info!("Check the ledger to make sure it's the right height..."); - let bank = Fullnode::new_bank_from_ledger(&leader_ledger_path, None).0; + let bank = + Fullnode::new_bank_from_ledger(&leader_ledger_path, &LeaderSchedulerConfig::default()).0; assert_eq!( bank.tick_height(),