Try harder to keep LeaderSchedulerConfig and BlocktreeConfig in sync
This commit is contained in:
parent
095afdfe47
commit
aac1a58651
|
@ -65,7 +65,6 @@ pub struct FullnodeConfig {
|
||||||
pub entry_stream: Option<String>,
|
pub entry_stream: Option<String>,
|
||||||
pub storage_rotate_count: u64,
|
pub storage_rotate_count: u64,
|
||||||
pub leader_scheduler_config: LeaderSchedulerConfig,
|
pub leader_scheduler_config: LeaderSchedulerConfig,
|
||||||
pub ledger_config: BlocktreeConfig,
|
|
||||||
pub tick_config: PohServiceConfig,
|
pub tick_config: PohServiceConfig,
|
||||||
}
|
}
|
||||||
impl Default for FullnodeConfig {
|
impl Default for FullnodeConfig {
|
||||||
|
@ -80,16 +79,16 @@ impl Default for FullnodeConfig {
|
||||||
entry_stream: None,
|
entry_stream: None,
|
||||||
storage_rotate_count: NUM_HASHES_FOR_STORAGE_ROTATE,
|
storage_rotate_count: NUM_HASHES_FOR_STORAGE_ROTATE,
|
||||||
leader_scheduler_config: LeaderSchedulerConfig::default(),
|
leader_scheduler_config: LeaderSchedulerConfig::default(),
|
||||||
ledger_config: BlocktreeConfig::default(),
|
|
||||||
tick_config: PohServiceConfig::default(),
|
tick_config: PohServiceConfig::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FullnodeConfig {
|
impl FullnodeConfig {
|
||||||
pub fn set_leader_scheduler_config(&mut self, config: LeaderSchedulerConfig) {
|
pub fn ledger_config(&self) -> BlocktreeConfig {
|
||||||
self.ledger_config.ticks_per_slot = config.ticks_per_slot;
|
// TODO: Refactor LeaderSchedulerConfig and BlocktreeConfig to avoid the duplicated
|
||||||
self.leader_scheduler_config = config;
|
// `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,
|
ledger_signal_receiver,
|
||||||
) = new_bank_from_ledger(
|
) = new_bank_from_ledger(
|
||||||
ledger_path,
|
ledger_path,
|
||||||
config.ledger_config,
|
config.ledger_config(),
|
||||||
&config.leader_scheduler_config,
|
&config.leader_scheduler_config,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -645,7 +644,7 @@ mod tests {
|
||||||
let voting_keypair = VotingKeypair::new_local(&bootstrap_leader_keypair);
|
let voting_keypair = VotingKeypair::new_local(&bootstrap_leader_keypair);
|
||||||
// Start the bootstrap leader
|
// Start the bootstrap leader
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
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(
|
let bootstrap_leader = Fullnode::new(
|
||||||
bootstrap_leader_node,
|
bootstrap_leader_node,
|
||||||
&bootstrap_leader_keypair,
|
&bootstrap_leader_keypair,
|
||||||
|
@ -674,11 +673,11 @@ mod tests {
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
let ticks_per_slot = 16;
|
let ticks_per_slot = 16;
|
||||||
let slots_per_epoch = 2;
|
let slots_per_epoch = 2;
|
||||||
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
|
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
|
||||||
ticks_per_slot,
|
ticks_per_slot,
|
||||||
slots_per_epoch,
|
slots_per_epoch,
|
||||||
ticks_per_slot * slots_per_epoch,
|
ticks_per_slot * slots_per_epoch,
|
||||||
));
|
);
|
||||||
|
|
||||||
// Create the leader and validator nodes
|
// Create the leader and validator nodes
|
||||||
let bootstrap_leader_keypair = Arc::new(Keypair::new());
|
let bootstrap_leader_keypair = Arc::new(Keypair::new());
|
||||||
|
@ -768,11 +767,11 @@ mod tests {
|
||||||
|
|
||||||
// Set the leader scheduler for the validator
|
// Set the leader scheduler for the validator
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
|
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
|
||||||
ticks_per_slot,
|
ticks_per_slot,
|
||||||
slots_per_epoch,
|
slots_per_epoch,
|
||||||
ticks_per_slot * slots_per_epoch,
|
ticks_per_slot * slots_per_epoch,
|
||||||
));
|
);
|
||||||
|
|
||||||
let voting_keypair = VotingKeypair::new_local(&validator_keypair);
|
let voting_keypair = VotingKeypair::new_local(&validator_keypair);
|
||||||
|
|
||||||
|
@ -869,11 +868,11 @@ mod tests {
|
||||||
|
|
||||||
// Set the leader scheduler for the validator
|
// Set the leader scheduler for the validator
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
|
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
|
||||||
ticks_per_slot,
|
ticks_per_slot,
|
||||||
slots_per_epoch,
|
slots_per_epoch,
|
||||||
ticks_per_slot * slots_per_epoch,
|
ticks_per_slot * slots_per_epoch,
|
||||||
));
|
);
|
||||||
let config = PohServiceConfig::Sleep(Duration::from_millis(200));
|
let config = PohServiceConfig::Sleep(Duration::from_millis(200));
|
||||||
fullnode_config.tick_config = config;
|
fullnode_config.tick_config = config;
|
||||||
|
|
||||||
|
|
|
@ -854,14 +854,14 @@ fn test_leader_to_validator_transition() {
|
||||||
|
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
let ticks_per_slot = 5;
|
let ticks_per_slot = 5;
|
||||||
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
|
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
|
||||||
ticks_per_slot,
|
ticks_per_slot,
|
||||||
1,
|
1,
|
||||||
// Setup window length to exclude the genesis bootstrap leader vote at tick height 0, so
|
// 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
|
// that when the leader schedule is recomputed for epoch 1 only the validator vote at tick
|
||||||
// height 1 will be considered.
|
// height 1 will be considered.
|
||||||
ticks_per_slot,
|
ticks_per_slot,
|
||||||
));
|
);
|
||||||
|
|
||||||
// Initialize the leader ledger. Make a mint and a genesis entry
|
// Initialize the leader ledger. Make a mint and a genesis entry
|
||||||
// in the leader ledger
|
// in the leader ledger
|
||||||
|
@ -1005,11 +1005,11 @@ fn test_leader_validator_basic() {
|
||||||
// Create the leader scheduler config
|
// Create the leader scheduler config
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
let ticks_per_slot = 5;
|
let ticks_per_slot = 5;
|
||||||
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
|
fullnode_config.leader_scheduler_config = LeaderSchedulerConfig::new(
|
||||||
ticks_per_slot,
|
ticks_per_slot,
|
||||||
1, // 1 slot per epoch
|
1, // 1 slot per epoch
|
||||||
ticks_per_slot,
|
ticks_per_slot,
|
||||||
));
|
);
|
||||||
|
|
||||||
// Start the validator node
|
// Start the validator node
|
||||||
let voting_keypair = VotingKeypair::new_local(&validator_keypair);
|
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_slot = 5;
|
||||||
let ticks_per_epoch = slots_per_epoch * ticks_per_slot;
|
let ticks_per_epoch = slots_per_epoch * ticks_per_slot;
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
|
fullnode_config.leader_scheduler_config =
|
||||||
ticks_per_slot,
|
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch);
|
||||||
slots_per_epoch,
|
|
||||||
ticks_per_epoch,
|
|
||||||
));
|
|
||||||
|
|
||||||
// Make a common mint and a genesis entry for both leader + validator's ledgers
|
// Make a common mint and a genesis entry for both leader + validator's ledgers
|
||||||
let num_ending_ticks = 1;
|
let num_ending_ticks = 1;
|
||||||
|
@ -1333,11 +1330,8 @@ fn test_full_leader_validator_network() {
|
||||||
let ticks_per_slot = 5;
|
let ticks_per_slot = 5;
|
||||||
let ticks_per_epoch = slots_per_epoch * ticks_per_slot;
|
let ticks_per_epoch = slots_per_epoch * ticks_per_slot;
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
|
fullnode_config.leader_scheduler_config =
|
||||||
ticks_per_slot,
|
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch * 3);
|
||||||
slots_per_epoch,
|
|
||||||
ticks_per_epoch * 3,
|
|
||||||
));
|
|
||||||
|
|
||||||
let mut nodes = vec![];
|
let mut nodes = vec![];
|
||||||
|
|
||||||
|
@ -1536,11 +1530,8 @@ fn test_broadcast_last_tick() {
|
||||||
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);
|
||||||
let mut fullnode_config = FullnodeConfig::default();
|
let mut fullnode_config = FullnodeConfig::default();
|
||||||
fullnode_config.set_leader_scheduler_config(LeaderSchedulerConfig::new(
|
fullnode_config.leader_scheduler_config =
|
||||||
ticks_per_slot,
|
LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch);
|
||||||
slots_per_epoch,
|
|
||||||
ticks_per_epoch,
|
|
||||||
));
|
|
||||||
let bootstrap_leader = Fullnode::new(
|
let bootstrap_leader = Fullnode::new(
|
||||||
bootstrap_leader_node,
|
bootstrap_leader_node,
|
||||||
&bootstrap_leader_keypair,
|
&bootstrap_leader_keypair,
|
||||||
|
|
Loading…
Reference in New Issue