Use bank for leader scheduler's config
This ensures GenesisBlock is always configured with the same ticks_per_slot as LeaderScheduler. This will make it easier to migrate to bank-generated schedules.
This commit is contained in:
parent
d26f836212
commit
fdf6cae6fb
|
@ -166,7 +166,6 @@ pub struct BlockData {
|
|||
mod test {
|
||||
use super::*;
|
||||
use crate::entry::Entry;
|
||||
use crate::leader_scheduler::LeaderSchedulerConfig;
|
||||
use chrono::{DateTime, FixedOffset};
|
||||
use serde_json::Value;
|
||||
use solana_runtime::bank::Bank;
|
||||
|
@ -179,11 +178,10 @@ mod test {
|
|||
// Set up bank and leader_scheduler
|
||||
let (mut genesis_block, _mint_keypair) = GenesisBlock::new(1_000_000);
|
||||
genesis_block.ticks_per_slot = 5;
|
||||
let leader_scheduler_config =
|
||||
LeaderSchedulerConfig::new(genesis_block.ticks_per_slot, 2, 10);
|
||||
genesis_block.slots_per_epoch = 2;
|
||||
|
||||
let bank = Bank::new(&genesis_block);
|
||||
let leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank);
|
||||
let leader_scheduler = LeaderScheduler::new_with_window_len(10, &bank);
|
||||
let leader_scheduler = Arc::new(RwLock::new(leader_scheduler));
|
||||
|
||||
// Set up blockstream
|
||||
|
|
|
@ -117,7 +117,6 @@ impl Service for BlockstreamService {
|
|||
mod test {
|
||||
use super::*;
|
||||
use crate::entry::Entry;
|
||||
use crate::leader_scheduler::LeaderSchedulerConfig;
|
||||
use chrono::{DateTime, FixedOffset};
|
||||
use serde_json::Value;
|
||||
use solana_runtime::bank::Bank;
|
||||
|
@ -132,10 +131,12 @@ mod test {
|
|||
let ticks_per_slot = 5;
|
||||
let starting_tick_height = 1;
|
||||
|
||||
let (genesis_block, _mint_keypair) = GenesisBlock::new(1_000_000);
|
||||
let (mut genesis_block, _mint_keypair) = GenesisBlock::new(1_000_000);
|
||||
genesis_block.ticks_per_slot = ticks_per_slot;
|
||||
genesis_block.slots_per_epoch = 2;
|
||||
|
||||
let bank = Bank::new(&genesis_block);
|
||||
let leader_scheduler_config = LeaderSchedulerConfig::new(ticks_per_slot, 2, 10);
|
||||
let leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank);
|
||||
let leader_scheduler = LeaderScheduler::new_with_window_len(10, &bank);
|
||||
let leader_scheduler = Arc::new(RwLock::new(leader_scheduler));
|
||||
|
||||
// Set up blockstream
|
||||
|
|
|
@ -105,12 +105,21 @@ impl LeaderScheduler {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn new_with_bank(config: &LeaderSchedulerConfig, bank: &Bank) -> Self {
|
||||
let mut leader_schedule = Self::new(config);
|
||||
pub fn new_with_window_len(active_window_slot_len: u64, bank: &Bank) -> Self {
|
||||
let config = LeaderSchedulerConfig::new(
|
||||
bank.ticks_per_slot(),
|
||||
bank.slots_per_epoch(),
|
||||
active_window_slot_len,
|
||||
);
|
||||
let mut leader_schedule = Self::new(&config);
|
||||
leader_schedule.update_tick_height(bank.tick_height(), bank);
|
||||
leader_schedule
|
||||
}
|
||||
|
||||
pub fn new_with_bank(bank: &Bank) -> Self {
|
||||
Self::new_with_window_len(DEFAULT_ACTIVE_WINDOW_NUM_SLOTS, bank)
|
||||
}
|
||||
|
||||
pub fn tick_height_to_slot(&self, tick_height: u64) -> u64 {
|
||||
tick_height / self.ticks_per_slot
|
||||
}
|
||||
|
@ -399,13 +408,12 @@ pub mod tests {
|
|||
// Allow the validators to be in the active window for the entire test
|
||||
let active_window_num_slots = slots_per_epoch;
|
||||
|
||||
// Set up the LeaderScheduler struct
|
||||
let leader_scheduler_config =
|
||||
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots);
|
||||
|
||||
// Create the bank and validators, which are inserted in order of account balance
|
||||
let num_vote_account_tokens = 1;
|
||||
let (genesis_block, mint_keypair) = GenesisBlock::new(10_000);
|
||||
let (mut genesis_block, mint_keypair) = GenesisBlock::new(10_000);
|
||||
genesis_block.ticks_per_slot = ticks_per_slot;
|
||||
genesis_block.slots_per_epoch = slots_per_epoch;
|
||||
|
||||
info!("bootstrap_leader_id: {}", genesis_block.bootstrap_leader_id);
|
||||
|
||||
let bank = Bank::new(&genesis_block);
|
||||
|
@ -434,7 +442,8 @@ pub mod tests {
|
|||
);
|
||||
}
|
||||
|
||||
let mut leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank);
|
||||
let mut leader_scheduler =
|
||||
LeaderScheduler::new_with_window_len(active_window_num_slots, &bank);
|
||||
|
||||
// Generate the schedule for first epoch, bootstrap_leader will be the only leader
|
||||
leader_scheduler.generate_schedule(0, &bank);
|
||||
|
@ -509,8 +518,7 @@ pub mod tests {
|
|||
let leader_tokens = 2;
|
||||
let (genesis_block, _) = GenesisBlock::new_with_leader(5, leader_id, leader_tokens);
|
||||
let bank = Bank::new(&genesis_block);
|
||||
let leader_scheduler =
|
||||
LeaderScheduler::new_with_bank(&LeaderSchedulerConfig::default(), &bank);
|
||||
let leader_scheduler = LeaderScheduler::new_with_bank(&bank);
|
||||
let slot = leader_scheduler.tick_height_to_slot(bank.tick_height());
|
||||
assert_eq!(leader_scheduler.get_leader_for_slot(slot), Some(leader_id));
|
||||
}
|
||||
|
@ -645,14 +653,15 @@ pub mod tests {
|
|||
let active_window_num_slots = slots_per_epoch;
|
||||
|
||||
// Create the bazzznk and validators
|
||||
let (genesis_block, mint_keypair) = GenesisBlock::new(
|
||||
let (mut genesis_block, mint_keypair) = GenesisBlock::new(
|
||||
((((num_validators + 1) / 2) * (num_validators + 1))
|
||||
+ (num_vote_account_tokens * num_validators)) as u64,
|
||||
);
|
||||
genesis_block.ticks_per_slot = ticks_per_slot;
|
||||
genesis_block.slots_per_epoch = slots_per_epoch;
|
||||
let bank = Bank::new(&genesis_block);
|
||||
let leader_scheduler_config =
|
||||
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots);
|
||||
let mut leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank);
|
||||
let mut leader_scheduler =
|
||||
LeaderScheduler::new_with_window_len(active_window_num_slots, &bank);
|
||||
|
||||
let mut validators = vec![];
|
||||
let last_id = genesis_block.last_id();
|
||||
|
@ -715,11 +724,13 @@ 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 (mut genesis_block, _) = GenesisBlock::new(10_000);
|
||||
genesis_block.ticks_per_slot = ticks_per_slot;
|
||||
genesis_block.slots_per_epoch = slots_per_epoch;
|
||||
|
||||
let bank = Bank::new(&genesis_block);
|
||||
let leader_scheduler_config =
|
||||
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots);
|
||||
let mut leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank);
|
||||
let mut leader_scheduler =
|
||||
LeaderScheduler::new_with_window_len(active_window_num_slots, &bank);
|
||||
info!(
|
||||
"bootstrap_leader_id: {:?}",
|
||||
genesis_block.bootstrap_leader_id
|
||||
|
|
|
@ -777,8 +777,7 @@ mod test {
|
|||
|
||||
let genesis_block = GenesisBlock::new(10_000).0;
|
||||
let bank = Arc::new(Bank::new(&genesis_block));
|
||||
let leader_scheduler_config = LeaderSchedulerConfig::default();
|
||||
let leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank);
|
||||
let leader_scheduler = LeaderScheduler::new_with_bank(&bank);
|
||||
let leader_scheduler = Arc::new(RwLock::new(leader_scheduler));
|
||||
let voting_keypair = Some(Arc::new(Keypair::new()));
|
||||
let res = ReplayStage::process_entries(
|
||||
|
@ -805,7 +804,7 @@ mod test {
|
|||
}
|
||||
|
||||
let bank = Arc::new(Bank::new(&genesis_block));
|
||||
let leader_scheduler = LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank);
|
||||
let leader_scheduler = LeaderScheduler::new_with_bank(&bank);
|
||||
let leader_scheduler = Arc::new(RwLock::new(leader_scheduler));
|
||||
let res = ReplayStage::process_entries(
|
||||
entries.clone(),
|
||||
|
|
|
@ -206,7 +206,6 @@ pub mod tests {
|
|||
use super::*;
|
||||
use crate::blocktree::get_tmp_ledger_path;
|
||||
use crate::cluster_info::{ClusterInfo, Node};
|
||||
use crate::leader_scheduler::LeaderSchedulerConfig;
|
||||
use crate::storage_stage::STORAGE_ROTATE_TEST_COUNT;
|
||||
use solana_runtime::bank::Bank;
|
||||
use solana_sdk::genesis_block::GenesisBlock;
|
||||
|
@ -228,9 +227,7 @@ pub mod tests {
|
|||
entry_height: 0,
|
||||
last_entry_id: Hash::default(),
|
||||
}];
|
||||
let leader_scheduler_config = LeaderSchedulerConfig::default();
|
||||
let leader_scheduler =
|
||||
LeaderScheduler::new_with_bank(&leader_scheduler_config, &bank_forks.working_bank());
|
||||
let leader_scheduler = LeaderScheduler::new_with_bank(&bank_forks.working_bank());
|
||||
let leader_scheduler = Arc::new(RwLock::new(leader_scheduler));
|
||||
|
||||
//start cluster_info1
|
||||
|
|
19
tests/tvu.rs
19
tests/tvu.rs
|
@ -7,7 +7,6 @@ use solana::entry::next_entry_mut;
|
|||
use solana::entry::EntrySlice;
|
||||
use solana::gossip_service::GossipService;
|
||||
use solana::leader_scheduler::LeaderScheduler;
|
||||
use solana::leader_scheduler::LeaderSchedulerConfig;
|
||||
use solana::packet::index_blobs;
|
||||
use solana::rpc_subscriptions::RpcSubscriptions;
|
||||
use solana::service::Service;
|
||||
|
@ -76,14 +75,13 @@ fn test_replay() {
|
|||
r_responder,
|
||||
);
|
||||
|
||||
// TODO: Fix this test so it always works with the default
|
||||
// LeaderSchedulerConfig configuration
|
||||
let mut leader_scheduler_config = LeaderSchedulerConfig::default();
|
||||
leader_scheduler_config.ticks_per_slot = 64;
|
||||
let ticks_per_slot = leader_scheduler_config.ticks_per_slot;
|
||||
|
||||
let starting_balance = 10_000;
|
||||
let (genesis_block, mint_keypair) = GenesisBlock::new(starting_balance);
|
||||
let (mut genesis_block, mint_keypair) = GenesisBlock::new(starting_balance);
|
||||
|
||||
// TODO: Fix this test so it always works with the default GenesisBlock configuration
|
||||
genesis_block.ticks_per_slot = 64;
|
||||
|
||||
let ticks_per_slot = genesis_block.ticks_per_slot;
|
||||
let tvu_addr = target1.info.tvu;
|
||||
|
||||
let mut cur_hash = Hash::default();
|
||||
|
@ -95,10 +93,7 @@ fn test_replay() {
|
|||
}];
|
||||
|
||||
let bank = bank_forks.working_bank();
|
||||
let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::new_with_bank(
|
||||
&leader_scheduler_config,
|
||||
&bank,
|
||||
)));
|
||||
let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::new_with_bank(&bank)));
|
||||
assert_eq!(bank.get_balance(&mint_keypair.pubkey()), starting_balance);
|
||||
|
||||
// start cluster_info1
|
||||
|
|
Loading…
Reference in New Issue