From 29ef9370a67c9a59fa8c8b914b31dd46613cd219 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Mon, 28 Jan 2019 13:29:13 -0800 Subject: [PATCH] Remove LeaderSchedulerConfig options --- src/fullnode.rs | 24 ++++----- src/leader_scheduler.rs | 114 +++++++++++++++++++--------------------- src/replay_stage.rs | 16 +++--- tests/multinode.rs | 40 +++++++------- 4 files changed, 95 insertions(+), 99 deletions(-) diff --git a/src/fullnode.rs b/src/fullnode.rs index f42dfac5a2..8ed2b421c8 100644 --- a/src/fullnode.rs +++ b/src/fullnode.rs @@ -667,10 +667,10 @@ mod tests { // restart as a leader again. let bootstrap_height = initial_tick_height + 1; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height as u64), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(active_window_length), + bootstrap_height as u64, + leader_rotation_interval, + seed_rotation_interval, + active_window_length, ); let bootstrap_leader_keypair = Arc::new(bootstrap_leader_keypair); @@ -771,10 +771,10 @@ mod tests { // after parsing the ledger during startup let bootstrap_height = genesis_tick_height; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(genesis_tick_height), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + genesis_tick_height, ); { @@ -882,10 +882,10 @@ mod tests { let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(leader_rotation_interval * 2), - Some(bootstrap_height), + bootstrap_height, + leader_rotation_interval, + leader_rotation_interval * 2, + bootstrap_height, ); let vote_signer = VoteSignerProxy::new_local(&validator_keypair); diff --git a/src/leader_scheduler.rs b/src/leader_scheduler.rs index fce4b1bfc5..ca9e2fcb6d 100644 --- a/src/leader_scheduler.rs +++ b/src/leader_scheduler.rs @@ -27,33 +27,44 @@ pub const DEFAULT_ACTIVE_WINDOW_LENGTH: u64 = TICKS_PER_BLOCK * 256; pub struct LeaderSchedulerConfig { // The interval at which to rotate the leader, should be much less than // seed_rotation_interval - pub leader_rotation_interval_option: Option, + pub leader_rotation_interval: u64, // The interval at which to generate the seed used for ranking the validators - pub seed_rotation_interval_option: Option, + pub seed_rotation_interval: u64, // The last height at which the bootstrap_leader will be in power before // the leader rotation process begins to pick future leaders - pub bootstrap_height_option: Option, + pub bootstrap_height: u64, // The length of the acceptable window for determining live validators - pub active_window_length_option: Option, + pub active_window_length: u64, } // Used to toggle leader rotation in fullnode so that tests that don't // need leader rotation don't break impl LeaderSchedulerConfig { pub fn new( - bootstrap_height_option: Option, - leader_rotation_interval_option: Option, - seed_rotation_interval_option: Option, - active_window_length_option: Option, + bootstrap_height: u64, + leader_rotation_interval: u64, + seed_rotation_interval: u64, + active_window_length: u64, ) -> Self { LeaderSchedulerConfig { - bootstrap_height_option, - leader_rotation_interval_option, - seed_rotation_interval_option, - active_window_length_option, + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + active_window_length, + } + } +} + +impl Default for LeaderSchedulerConfig { + fn default() -> Self { + Self { + bootstrap_height: DEFAULT_BOOTSTRAP_HEIGHT, + leader_rotation_interval: DEFAULT_LEADER_ROTATION_INTERVAL, + seed_rotation_interval: DEFAULT_SEED_ROTATION_INTERVAL, + active_window_length: DEFAULT_ACTIVE_WINDOW_LENGTH, } } } @@ -111,7 +122,7 @@ pub struct LeaderScheduler { // calculate the leader schedule for the upcoming seed_rotation_interval PoH counts. impl LeaderScheduler { pub fn from_bootstrap_leader(bootstrap_leader: Pubkey) -> Self { - let config = LeaderSchedulerConfig::new(None, None, None, None); + let config = LeaderSchedulerConfig::default(); let mut leader_scheduler = LeaderScheduler::new(&config); leader_scheduler.use_only_bootstrap_leader = true; leader_scheduler.bootstrap_leader = bootstrap_leader; @@ -119,25 +130,10 @@ impl LeaderScheduler { } pub fn new(config: &LeaderSchedulerConfig) -> Self { - let mut bootstrap_height = DEFAULT_BOOTSTRAP_HEIGHT; - if let Some(input) = config.bootstrap_height_option { - bootstrap_height = input; - } - - let mut leader_rotation_interval = DEFAULT_LEADER_ROTATION_INTERVAL; - if let Some(input) = config.leader_rotation_interval_option { - leader_rotation_interval = input; - } - - let mut seed_rotation_interval = DEFAULT_SEED_ROTATION_INTERVAL; - if let Some(input) = config.seed_rotation_interval_option { - seed_rotation_interval = input; - } - - let mut active_window_length = DEFAULT_ACTIVE_WINDOW_LENGTH; - if let Some(input) = config.active_window_length_option { - active_window_length = input; - } + let bootstrap_height = config.bootstrap_height; + let leader_rotation_interval = config.leader_rotation_interval; + let seed_rotation_interval = config.seed_rotation_interval; + let active_window_length = config.active_window_length; // Enforced invariants assert!(seed_rotation_interval >= leader_rotation_interval); @@ -566,10 +562,10 @@ mod tests { // Set up the LeaderScheduler struct let bootstrap_leader_id = Keypair::new().pubkey(); let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(active_window_length), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + active_window_length, ); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); @@ -695,7 +691,7 @@ mod tests { let bank = Bank::new(&genesis_block); let leader_scheduler_config = - LeaderSchedulerConfig::new(Some(100), Some(100), Some(100), Some(active_window_length)); + LeaderSchedulerConfig::new(100, 100, 100, active_window_length); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); leader_scheduler.bootstrap_leader = leader_id; @@ -977,10 +973,10 @@ mod tests { let active_window_length = seed_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(active_window_length), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + active_window_length, ); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); @@ -1051,7 +1047,7 @@ mod tests { let bank = Bank::new(&genesis_block); let leader_scheduler_config = - LeaderSchedulerConfig::new(Some(100), Some(100), Some(100), Some(active_window_length)); + LeaderSchedulerConfig::new(100, 100, 100, active_window_length); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); leader_scheduler.bootstrap_leader = leader_id; @@ -1100,10 +1096,10 @@ mod tests { let active_window_length = 1; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(active_window_length), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + active_window_length, ); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); @@ -1130,7 +1126,7 @@ mod tests { let bootstrap_leader_id = Keypair::new().pubkey(); // Check defaults for LeaderScheduler - let leader_scheduler_config = LeaderSchedulerConfig::new(None, None, None, None); + let leader_scheduler_config = LeaderSchedulerConfig::default(); let leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); @@ -1154,10 +1150,10 @@ mod tests { let active_window_length = 1; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(active_window_length), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + active_window_length, ); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); @@ -1184,10 +1180,10 @@ mod tests { let active_window_length = bootstrap_height + seed_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(active_window_length), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + active_window_length, ); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); @@ -1291,10 +1287,10 @@ mod tests { let active_window_length = bootstrap_height + seed_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(active_window_length), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + active_window_length, ); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); diff --git a/src/replay_stage.rs b/src/replay_stage.rs index 2545744cb7..70f19bbbb0 100644 --- a/src/replay_stage.rs +++ b/src/replay_stage.rs @@ -356,10 +356,10 @@ mod test { let num_bootstrap_slots = 2; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(leader_rotation_interval * 2), - Some(bootstrap_height), + bootstrap_height, + leader_rotation_interval, + leader_rotation_interval * 2, + bootstrap_height, ); let leader_scheduler = @@ -571,10 +571,10 @@ mod test { let num_bootstrap_slots = 2; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(leader_rotation_interval * 2), - Some(bootstrap_height), + bootstrap_height, + leader_rotation_interval, + leader_rotation_interval * 2, + bootstrap_height, ); let leader_scheduler = diff --git a/tests/multinode.rs b/tests/multinode.rs index b55129dd59..cc512748d8 100644 --- a/tests/multinode.rs +++ b/tests/multinode.rs @@ -1007,10 +1007,10 @@ fn test_leader_to_validator_transition() { // Start the leader node let bootstrap_height = leader_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(leader_rotation_interval * 2), - Some(bootstrap_height), + bootstrap_height, + leader_rotation_interval, + leader_rotation_interval * 2, + bootstrap_height, ); let signer_proxy = VoteSignerProxy::new_local(&leader_keypair); @@ -1161,10 +1161,10 @@ fn test_leader_validator_basic() { let num_bootstrap_slots = 2; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(leader_rotation_interval * 2), - Some(bootstrap_height), + bootstrap_height, + leader_rotation_interval, + leader_rotation_interval * 2, + bootstrap_height, ); // Start the validator node @@ -1364,10 +1364,10 @@ fn test_dropped_handoff_recovery() { let seed_rotation_interval = num_slots_per_epoch * leader_rotation_interval; let bootstrap_height = initial_tick_height + 1; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(leader_rotation_interval), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + leader_rotation_interval, ); info!("bootstrap_leader: {}", bootstrap_leader_keypair.pubkey()); info!("'next leader': {}", next_leader_keypair.pubkey()); @@ -1545,10 +1545,10 @@ fn test_full_leader_validator_network() { let seed_rotation_interval = num_slots_per_epoch * leader_rotation_interval; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(100), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + 100, ); let exit = Arc::new(AtomicBool::new(false)); @@ -1764,10 +1764,10 @@ fn test_broadcast_last_tick() { let leader_rotation_interval = 100; let seed_rotation_interval = 200; let leader_scheduler_config = LeaderSchedulerConfig::new( - Some(bootstrap_height), - Some(leader_rotation_interval), - Some(seed_rotation_interval), - Some(leader_rotation_interval), + bootstrap_height, + leader_rotation_interval, + seed_rotation_interval, + leader_rotation_interval, ); // Start up the bootstrap leader fullnode