Remove LeaderSchedulerConfig options

This commit is contained in:
Michael Vines 2019-01-28 13:29:13 -08:00
parent 2262f279d5
commit 29ef9370a6
4 changed files with 95 additions and 99 deletions

View File

@ -667,10 +667,10 @@ mod tests {
// restart as a leader again. // restart as a leader again.
let bootstrap_height = initial_tick_height + 1; let bootstrap_height = initial_tick_height + 1;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height as u64), bootstrap_height as u64,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(active_window_length), active_window_length,
); );
let bootstrap_leader_keypair = Arc::new(bootstrap_leader_keypair); let bootstrap_leader_keypair = Arc::new(bootstrap_leader_keypair);
@ -771,10 +771,10 @@ mod tests {
// after parsing the ledger during startup // after parsing the ledger during startup
let bootstrap_height = genesis_tick_height; let bootstrap_height = genesis_tick_height;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(genesis_tick_height), genesis_tick_height,
); );
{ {
@ -882,10 +882,10 @@ mod tests {
let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(leader_rotation_interval * 2), leader_rotation_interval * 2,
Some(bootstrap_height), bootstrap_height,
); );
let vote_signer = VoteSignerProxy::new_local(&validator_keypair); let vote_signer = VoteSignerProxy::new_local(&validator_keypair);

View File

@ -27,33 +27,44 @@ pub const DEFAULT_ACTIVE_WINDOW_LENGTH: u64 = TICKS_PER_BLOCK * 256;
pub struct LeaderSchedulerConfig { pub struct LeaderSchedulerConfig {
// The interval at which to rotate the leader, should be much less than // The interval at which to rotate the leader, should be much less than
// seed_rotation_interval // seed_rotation_interval
pub leader_rotation_interval_option: Option<u64>, pub leader_rotation_interval: u64,
// The interval at which to generate the seed used for ranking the validators // The interval at which to generate the seed used for ranking the validators
pub seed_rotation_interval_option: Option<u64>, pub seed_rotation_interval: u64,
// The last height at which the bootstrap_leader will be in power before // The last height at which the bootstrap_leader will be in power before
// the leader rotation process begins to pick future leaders // the leader rotation process begins to pick future leaders
pub bootstrap_height_option: Option<u64>, pub bootstrap_height: u64,
// The length of the acceptable window for determining live validators // The length of the acceptable window for determining live validators
pub active_window_length_option: Option<u64>, pub active_window_length: 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( pub fn new(
bootstrap_height_option: Option<u64>, bootstrap_height: u64,
leader_rotation_interval_option: Option<u64>, leader_rotation_interval: u64,
seed_rotation_interval_option: Option<u64>, seed_rotation_interval: u64,
active_window_length_option: Option<u64>, active_window_length: u64,
) -> Self { ) -> Self {
LeaderSchedulerConfig { LeaderSchedulerConfig {
bootstrap_height_option, bootstrap_height,
leader_rotation_interval_option, leader_rotation_interval,
seed_rotation_interval_option, seed_rotation_interval,
active_window_length_option, 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. // calculate the leader schedule for the upcoming seed_rotation_interval PoH counts.
impl LeaderScheduler { impl LeaderScheduler {
pub fn from_bootstrap_leader(bootstrap_leader: Pubkey) -> Self { 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); let mut leader_scheduler = LeaderScheduler::new(&config);
leader_scheduler.use_only_bootstrap_leader = true; leader_scheduler.use_only_bootstrap_leader = true;
leader_scheduler.bootstrap_leader = bootstrap_leader; leader_scheduler.bootstrap_leader = bootstrap_leader;
@ -119,25 +130,10 @@ impl LeaderScheduler {
} }
pub fn new(config: &LeaderSchedulerConfig) -> Self { pub fn new(config: &LeaderSchedulerConfig) -> Self {
let mut bootstrap_height = DEFAULT_BOOTSTRAP_HEIGHT; let bootstrap_height = config.bootstrap_height;
if let Some(input) = config.bootstrap_height_option { let leader_rotation_interval = config.leader_rotation_interval;
bootstrap_height = input; let seed_rotation_interval = config.seed_rotation_interval;
} let active_window_length = config.active_window_length;
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;
}
// Enforced invariants // Enforced invariants
assert!(seed_rotation_interval >= leader_rotation_interval); assert!(seed_rotation_interval >= leader_rotation_interval);
@ -566,10 +562,10 @@ mod tests {
// Set up the LeaderScheduler struct // Set up the LeaderScheduler struct
let bootstrap_leader_id = Keypair::new().pubkey(); let bootstrap_leader_id = Keypair::new().pubkey();
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(active_window_length), active_window_length,
); );
let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);
@ -695,7 +691,7 @@ mod tests {
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_block);
let leader_scheduler_config = 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); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);
leader_scheduler.bootstrap_leader = leader_id; leader_scheduler.bootstrap_leader = leader_id;
@ -977,10 +973,10 @@ mod tests {
let active_window_length = seed_rotation_interval; let active_window_length = seed_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(active_window_length), active_window_length,
); );
let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);
@ -1051,7 +1047,7 @@ mod tests {
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_block);
let leader_scheduler_config = 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); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);
leader_scheduler.bootstrap_leader = leader_id; leader_scheduler.bootstrap_leader = leader_id;
@ -1100,10 +1096,10 @@ mod tests {
let active_window_length = 1; let active_window_length = 1;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(active_window_length), active_window_length,
); );
let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);
@ -1130,7 +1126,7 @@ mod tests {
let bootstrap_leader_id = Keypair::new().pubkey(); let bootstrap_leader_id = Keypair::new().pubkey();
// Check defaults for LeaderScheduler // 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); let leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);
@ -1154,10 +1150,10 @@ mod tests {
let active_window_length = 1; let active_window_length = 1;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(active_window_length), active_window_length,
); );
let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); 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 active_window_length = bootstrap_height + seed_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(active_window_length), active_window_length,
); );
let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); 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 active_window_length = bootstrap_height + seed_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(active_window_length), active_window_length,
); );
let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config); let mut leader_scheduler = LeaderScheduler::new(&leader_scheduler_config);

View File

@ -356,10 +356,10 @@ mod test {
let num_bootstrap_slots = 2; let num_bootstrap_slots = 2;
let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(leader_rotation_interval * 2), leader_rotation_interval * 2,
Some(bootstrap_height), bootstrap_height,
); );
let leader_scheduler = let leader_scheduler =
@ -571,10 +571,10 @@ mod test {
let num_bootstrap_slots = 2; let num_bootstrap_slots = 2;
let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(leader_rotation_interval * 2), leader_rotation_interval * 2,
Some(bootstrap_height), bootstrap_height,
); );
let leader_scheduler = let leader_scheduler =

View File

@ -1007,10 +1007,10 @@ fn test_leader_to_validator_transition() {
// Start the leader node // Start the leader node
let bootstrap_height = leader_rotation_interval; let bootstrap_height = leader_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(leader_rotation_interval * 2), leader_rotation_interval * 2,
Some(bootstrap_height), bootstrap_height,
); );
let signer_proxy = VoteSignerProxy::new_local(&leader_keypair); let signer_proxy = VoteSignerProxy::new_local(&leader_keypair);
@ -1161,10 +1161,10 @@ fn test_leader_validator_basic() {
let num_bootstrap_slots = 2; let num_bootstrap_slots = 2;
let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(leader_rotation_interval * 2), leader_rotation_interval * 2,
Some(bootstrap_height), bootstrap_height,
); );
// Start the validator node // 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 seed_rotation_interval = num_slots_per_epoch * leader_rotation_interval;
let bootstrap_height = initial_tick_height + 1; let bootstrap_height = initial_tick_height + 1;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(leader_rotation_interval), leader_rotation_interval,
); );
info!("bootstrap_leader: {}", bootstrap_leader_keypair.pubkey()); info!("bootstrap_leader: {}", bootstrap_leader_keypair.pubkey());
info!("'next leader': {}", next_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 seed_rotation_interval = num_slots_per_epoch * leader_rotation_interval;
let bootstrap_height = num_bootstrap_slots * leader_rotation_interval; let bootstrap_height = num_bootstrap_slots * leader_rotation_interval;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(100), 100,
); );
let exit = Arc::new(AtomicBool::new(false)); let exit = Arc::new(AtomicBool::new(false));
@ -1764,10 +1764,10 @@ fn test_broadcast_last_tick() {
let leader_rotation_interval = 100; let leader_rotation_interval = 100;
let seed_rotation_interval = 200; let seed_rotation_interval = 200;
let leader_scheduler_config = LeaderSchedulerConfig::new( let leader_scheduler_config = LeaderSchedulerConfig::new(
Some(bootstrap_height), bootstrap_height,
Some(leader_rotation_interval), leader_rotation_interval,
Some(seed_rotation_interval), seed_rotation_interval,
Some(leader_rotation_interval), leader_rotation_interval,
); );
// Start up the bootstrap leader fullnode // Start up the bootstrap leader fullnode