Try harder to keep LeaderSchedulerConfig and BlocktreeConfig in sync

This commit is contained in:
Michael Vines 2019-02-11 09:09:57 -08:00
parent 095afdfe47
commit aac1a58651
2 changed files with 22 additions and 32 deletions

View File

@ -65,7 +65,6 @@ pub struct FullnodeConfig {
pub entry_stream: Option<String>,
pub storage_rotate_count: u64,
pub leader_scheduler_config: LeaderSchedulerConfig,
pub ledger_config: BlocktreeConfig,
pub tick_config: PohServiceConfig,
}
impl Default for FullnodeConfig {
@ -80,16 +79,16 @@ impl Default for FullnodeConfig {
entry_stream: None,
storage_rotate_count: NUM_HASHES_FOR_STORAGE_ROTATE,
leader_scheduler_config: LeaderSchedulerConfig::default(),
ledger_config: BlocktreeConfig::default(),
tick_config: PohServiceConfig::default(),
}
}
}
impl FullnodeConfig {
pub fn set_leader_scheduler_config(&mut self, config: LeaderSchedulerConfig) {
self.ledger_config.ticks_per_slot = config.ticks_per_slot;
self.leader_scheduler_config = config;
pub fn ledger_config(&self) -> BlocktreeConfig {
// TODO: Refactor LeaderSchedulerConfig and BlocktreeConfig to avoid the duplicated
// `ticks_per_slot` field that must be identical between the two
BlocktreeConfig::new(self.leader_scheduler_config.ticks_per_slot)
}
}
@ -133,7 +132,7 @@ impl Fullnode {
ledger_signal_receiver,
) = new_bank_from_ledger(
ledger_path,
config.ledger_config,
config.ledger_config(),
&config.leader_scheduler_config,
);
@ -645,7 +644,7 @@ mod tests {
let voting_keypair = VotingKeypair::new_local(&bootstrap_leader_keypair);
// Start the bootstrap leader
let mut fullnode_config = FullnodeConfig::default();
fullnode_config.set_leader_scheduler_config(leader_scheduler_config);
fullnode_config.leader_scheduler_config = leader_scheduler_config;
let bootstrap_leader = Fullnode::new(
bootstrap_leader_node,
&bootstrap_leader_keypair,
@ -674,11 +673,11 @@ mod tests {
let mut fullnode_config = FullnodeConfig::default();
let ticks_per_slot = 16;
let slots_per_epoch = 2;
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
ticks_per_slot,
slots_per_epoch,
ticks_per_slot * slots_per_epoch,
));
);
// Create the leader and validator nodes
let bootstrap_leader_keypair = Arc::new(Keypair::new());
@ -768,11 +767,11 @@ mod tests {
// Set the leader scheduler for the validator
let mut fullnode_config = FullnodeConfig::default();
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
ticks_per_slot,
slots_per_epoch,
ticks_per_slot * slots_per_epoch,
));
);
let voting_keypair = VotingKeypair::new_local(&validator_keypair);
@ -869,11 +868,11 @@ mod tests {
// Set the leader scheduler for the validator
let mut fullnode_config = FullnodeConfig::default();
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
ticks_per_slot,
slots_per_epoch,
ticks_per_slot * slots_per_epoch,
));
);
let config = PohServiceConfig::Sleep(Duration::from_millis(200));
fullnode_config.tick_config = config;

View File

@ -854,14 +854,14 @@ fn test_leader_to_validator_transition() {
let mut fullnode_config = FullnodeConfig::default();
let ticks_per_slot = 5;
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
ticks_per_slot,
1,
// Setup window length to exclude the genesis bootstrap leader vote at tick height 0, so
// that when the leader schedule is recomputed for epoch 1 only the validator vote at tick
// height 1 will be considered.
ticks_per_slot,
));
);
// Initialize the leader ledger. Make a mint and a genesis entry
// in the leader ledger
@ -1005,11 +1005,11 @@ fn test_leader_validator_basic() {
// Create the leader scheduler config
let mut fullnode_config = FullnodeConfig::default();
let ticks_per_slot = 5;
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
ticks_per_slot,
1, // 1 slot per epoch
ticks_per_slot,
));
);
// Start the validator node
let voting_keypair = VotingKeypair::new_local(&validator_keypair);
@ -1114,11 +1114,8 @@ fn test_dropped_handoff_recovery() {
let ticks_per_slot = 5;
let ticks_per_epoch = slots_per_epoch * ticks_per_slot;
let mut fullnode_config = FullnodeConfig::default();
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
ticks_per_slot,
slots_per_epoch,
ticks_per_epoch,
));
fullnode_config.leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch);
// Make a common mint and a genesis entry for both leader + validator's ledgers
let num_ending_ticks = 1;
@ -1333,11 +1330,8 @@ fn test_full_leader_validator_network() {
let ticks_per_slot = 5;
let ticks_per_epoch = slots_per_epoch * ticks_per_slot;
let mut fullnode_config = FullnodeConfig::default();
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
ticks_per_slot,
slots_per_epoch,
ticks_per_epoch * 3,
));
fullnode_config.leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch * 3);
let mut nodes = vec![];
@ -1536,11 +1530,8 @@ fn test_broadcast_last_tick() {
let bootstrap_leader_keypair = Arc::new(bootstrap_leader_keypair);
let voting_keypair = VotingKeypair::new_local(&bootstrap_leader_keypair);
let mut fullnode_config = FullnodeConfig::default();
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
ticks_per_slot,
slots_per_epoch,
ticks_per_epoch,
));
fullnode_config.leader_scheduler_config =
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch);
let bootstrap_leader = Fullnode::new(
bootstrap_leader_node,
&bootstrap_leader_keypair,