Rename active_window_length to active_window_num_slots

This commit is contained in:
Carl
2019-02-21 14:36:50 -08:00
committed by Grimes
parent f77788447c
commit fc48062867
3 changed files with 29 additions and 26 deletions

View File

@ -595,9 +595,9 @@ mod tests {
// epoch, check that the same leader knows to shut down and restart as a leader again. // epoch, check that the same leader knows to shut down and restart as a leader again.
let ticks_per_slot = 5; let ticks_per_slot = 5;
let slots_per_epoch = 2; let slots_per_epoch = 2;
let active_window_length = 10; let active_window_num_slots = 10;
let leader_scheduler_config = let leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_length); LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots);
let bootstrap_leader_keypair = Arc::new(bootstrap_leader_keypair); let bootstrap_leader_keypair = Arc::new(bootstrap_leader_keypair);
let voting_keypair = VotingKeypair::new_local(&bootstrap_leader_keypair); let voting_keypair = VotingKeypair::new_local(&bootstrap_leader_keypair);

View File

@ -22,17 +22,17 @@ pub struct LeaderSchedulerConfig {
pub slots_per_epoch: u64, pub slots_per_epoch: u64,
// The tick length of the acceptable window for determining live validators // The tick length of the acceptable window for determining live validators
pub active_window_length: u64, pub active_window_num_slots: u64,
} }
// Used to toggle leader rotation in fullnode so that tests that don't // Used to toggle leader rotation in fullnode so that tests that don't
// need leader rotation don't break // need leader rotation don't break
impl LeaderSchedulerConfig { impl LeaderSchedulerConfig {
pub fn new(ticks_per_slot: u64, slots_per_epoch: u64, active_window_length: u64) -> Self { pub fn new(ticks_per_slot: u64, slots_per_epoch: u64, active_window_num_slots: u64) -> Self {
LeaderSchedulerConfig { LeaderSchedulerConfig {
ticks_per_slot, ticks_per_slot,
slots_per_epoch, slots_per_epoch,
active_window_length, active_window_num_slots,
} }
} }
} }
@ -42,7 +42,7 @@ impl Default for LeaderSchedulerConfig {
Self { Self {
ticks_per_slot: DEFAULT_TICKS_PER_SLOT, ticks_per_slot: DEFAULT_TICKS_PER_SLOT,
slots_per_epoch: DEFAULT_SLOTS_PER_EPOCH, slots_per_epoch: DEFAULT_SLOTS_PER_EPOCH,
active_window_length: DEFAULT_ACTIVE_WINDOW_NUM_SLOTS, active_window_num_slots: DEFAULT_ACTIVE_WINDOW_NUM_SLOTS,
} }
} }
} }
@ -58,7 +58,7 @@ pub struct LeaderScheduler {
// The number of slots for which a vote qualifies a candidate for leader // The number of slots for which a vote qualifies a candidate for leader
// selection // selection
active_window_length: u64, active_window_num_slots: u64,
// Round-robin ordering of the validators for the current epoch at epoch_schedule[0], and the // Round-robin ordering of the validators for the current epoch at epoch_schedule[0], and the
// previous epoch at epoch_schedule[1] // previous epoch at epoch_schedule[1]
@ -89,18 +89,18 @@ impl LeaderScheduler {
pub fn new(config: &LeaderSchedulerConfig) -> Self { pub fn new(config: &LeaderSchedulerConfig) -> Self {
let ticks_per_slot = config.ticks_per_slot; let ticks_per_slot = config.ticks_per_slot;
let ticks_per_epoch = config.ticks_per_slot * config.slots_per_epoch; let ticks_per_epoch = config.ticks_per_slot * config.slots_per_epoch;
let active_window_length = config.active_window_length; let active_window_num_slots = config.active_window_num_slots;
// Enforced invariants // Enforced invariants
assert!(ticks_per_slot > 0); assert!(ticks_per_slot > 0);
assert!(ticks_per_epoch >= ticks_per_slot); assert!(ticks_per_epoch >= ticks_per_slot);
assert!(ticks_per_epoch % ticks_per_slot == 0); assert!(ticks_per_epoch % ticks_per_slot == 0);
assert!(active_window_length > 0); assert!(active_window_num_slots > 0);
LeaderScheduler { LeaderScheduler {
ticks_per_slot, ticks_per_slot,
ticks_per_epoch, ticks_per_epoch,
active_window_length, active_window_num_slots,
seed: 0, seed: 0,
epoch_schedule: [Vec::new(), Vec::new()], epoch_schedule: [Vec::new(), Vec::new()],
current_epoch: 0, current_epoch: 0,
@ -230,7 +230,8 @@ impl LeaderScheduler {
self.seed = Self::calculate_seed(tick_height); self.seed = Self::calculate_seed(tick_height);
let slot = self.tick_height_to_slot(tick_height); let slot = self.tick_height_to_slot(tick_height);
let ranked_active_set = let ranked_active_set =
ActiveStakers::new_with_bounds(&bank, self.active_window_length, slot).sorted_stakes(); ActiveStakers::new_with_bounds(&bank, self.active_window_num_slots, slot)
.sorted_stakes();
if ranked_active_set.is_empty() { if ranked_active_set.is_empty() {
info!( info!(
@ -395,11 +396,11 @@ pub mod tests {
num_validators, ticks_per_slot, slots_per_epoch num_validators, ticks_per_slot, slots_per_epoch
); );
// Allow the validators to be in the active window for the entire test // Allow the validators to be in the active window for the entire test
let active_window_length = slots_per_epoch; let active_window_num_slots = slots_per_epoch;
// Set up the LeaderScheduler struct // Set up the LeaderScheduler struct
let leader_scheduler_config = let leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_length); 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 // Create the bank and validators, which are inserted in order of account balance
let num_vote_account_tokens = 1; let num_vote_account_tokens = 1;
@ -422,7 +423,7 @@ pub mod tests {
.unwrap(); .unwrap();
// Vote to make the validator part of the active set for the entire test // Vote to make the validator part of the active set for the entire test
// (we made the active_window_length large enough at the beginning of the test) // (we made the active_window_num_slots large enough at the beginning of the test)
new_vote_account_with_vote( new_vote_account_with_vote(
&new_validator, &new_validator,
&voting_keypair, &voting_keypair,
@ -640,7 +641,7 @@ pub mod tests {
// is the cause of validators being truncated later) // is the cause of validators being truncated later)
let ticks_per_slot = 100; let ticks_per_slot = 100;
let slots_per_epoch = num_validators; let slots_per_epoch = num_validators;
let active_window_length = slots_per_epoch; let active_window_num_slots = slots_per_epoch;
// Create the bazzznk and validators // Create the bazzznk and validators
let (genesis_block, mint_keypair) = GenesisBlock::new( let (genesis_block, mint_keypair) = GenesisBlock::new(
@ -649,7 +650,7 @@ pub mod tests {
); );
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_block);
let leader_scheduler_config = let leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_length); 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_bank(&leader_scheduler_config, &bank);
let mut validators = vec![]; let mut validators = vec![];
@ -669,11 +670,11 @@ pub mod tests {
.unwrap(); .unwrap();
// Create a vote account and push a vote // Create a vote account and push a vote
let tick_height = (i + 2) * active_window_length - 1; let tick_height = (i + 2) * active_window_num_slots - 1;
new_vote_account_with_vote(&new_validator, &voting_keypair, &bank, 1, tick_height); new_vote_account_with_vote(&new_validator, &voting_keypair, &bank, 1, tick_height);
} }
// Generate schedule every active_window_length entries and check that // Generate schedule every active_window_num_slots entries and check that
// validators are falling out of the rotation as they fall out of the // validators are falling out of the rotation as they fall out of the
// active set // active set
trace!("bootstrap_leader_id: {}", genesis_block.bootstrap_leader_id); trace!("bootstrap_leader_id: {}", genesis_block.bootstrap_leader_id);
@ -686,7 +687,7 @@ pub mod tests {
for i in 0..=num_validators { for i in 0..=num_validators {
info!("i === {}", i); info!("i === {}", i);
leader_scheduler leader_scheduler
.generate_schedule((i + 1) * ticks_per_slot * active_window_length, &bank); .generate_schedule((i + 1) * ticks_per_slot * active_window_num_slots, &bank);
assert_eq!(leader_scheduler.current_epoch, i + 1); assert_eq!(leader_scheduler.current_epoch, i + 1);
if i == 0 { if i == 0 {
assert_eq!( assert_eq!(
@ -709,14 +710,14 @@ pub mod tests {
let ticks_per_slot = 100; let ticks_per_slot = 100;
let slots_per_epoch = 2; let slots_per_epoch = 2;
let ticks_per_epoch = ticks_per_slot * slots_per_epoch; let ticks_per_epoch = ticks_per_slot * slots_per_epoch;
let active_window_length = 1; let active_window_num_slots = 1;
// Check that the generate_schedule() function is being called by the // Check that the generate_schedule() function is being called by the
// update_tick_height() function at the correct entry heights. // update_tick_height() function at the correct entry heights.
let (genesis_block, _) = GenesisBlock::new(10_000); let (genesis_block, _) = GenesisBlock::new(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_block);
let leader_scheduler_config = let leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_length); 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_bank(&leader_scheduler_config, &bank);
info!( info!(
"bootstrap_leader_id: {:?}", "bootstrap_leader_id: {:?}",
@ -831,10 +832,10 @@ pub mod tests {
// Check actual arguments for LeaderScheduler // Check actual arguments for LeaderScheduler
let ticks_per_slot = 100; let ticks_per_slot = 100;
let slots_per_epoch = 2; let slots_per_epoch = 2;
let active_window_length = 1; let active_window_num_slots = 1;
let leader_scheduler_config = let leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_length); LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots);
let leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); let leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);
@ -849,7 +850,7 @@ pub mod tests {
let bootstrap_leader_keypair = Arc::new(Keypair::new()); let bootstrap_leader_keypair = Arc::new(Keypair::new());
let bootstrap_leader_id = bootstrap_leader_keypair.pubkey(); let bootstrap_leader_id = bootstrap_leader_keypair.pubkey();
let ticks_per_slot = 100; let ticks_per_slot = 100;
let active_window_length = slots_per_epoch; let active_window_num_slots = slots_per_epoch;
// Create mint and bank // Create mint and bank
let (genesis_block, mint_keypair) = let (genesis_block, mint_keypair) =
@ -903,7 +904,7 @@ pub mod tests {
); );
let leader_scheduler_config = let leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_length); LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, active_window_num_slots);
let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);
leader_scheduler.generate_schedule(0, &bank); leader_scheduler.generate_schedule(0, &bank);

View File

@ -1788,7 +1788,9 @@ fn test_fullnode_rotate(
*/ */
let blocktree_config = fullnode_config.ledger_config(); let blocktree_config = fullnode_config.ledger_config();
fullnode_config.leader_scheduler_config.active_window_length = std::u64::MAX; fullnode_config
.leader_scheduler_config
.active_window_num_slots = std::u64::MAX;
// Create the leader node information // Create the leader node information
let leader_keypair = Arc::new(Keypair::new()); let leader_keypair = Arc::new(Keypair::new());