Remove LeaderSchedulerConfig options
This commit is contained in:
parent
2262f279d5
commit
29ef9370a6
|
@ -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);
|
||||
|
|
|
@ -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<u64>,
|
||||
pub leader_rotation_interval: u64,
|
||||
|
||||
// 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 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
|
||||
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
|
||||
// need leader rotation don't break
|
||||
impl LeaderSchedulerConfig {
|
||||
pub fn new(
|
||||
bootstrap_height_option: Option<u64>,
|
||||
leader_rotation_interval_option: Option<u64>,
|
||||
seed_rotation_interval_option: Option<u64>,
|
||||
active_window_length_option: Option<u64>,
|
||||
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);
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue