create_tmp_sample_ledger() now returns entry_height and last_id
This commit is contained in:
parent
883fc39c80
commit
8cc1cde0fe
@ -32,7 +32,7 @@ fn bad_arguments() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn nominal() {
|
fn nominal() {
|
||||||
let keypair = Arc::new(Keypair::new());
|
let keypair = Arc::new(Keypair::new());
|
||||||
let (_genesis_block, _mint, ledger_path, _genesis_entries) =
|
let (_, _, ledger_path, _, _) =
|
||||||
create_tmp_sample_ledger("test_ledger_tool_nominal", 100, 10, keypair.pubkey(), 50);
|
create_tmp_sample_ledger("test_ledger_tool_nominal", 100, 10, keypair.pubkey(), 50);
|
||||||
|
|
||||||
// Basic validation
|
// Basic validation
|
||||||
|
@ -830,11 +830,11 @@ impl Iterator for EntryIterator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_empty_ledger(ledger_path: &str, genesis_block: &GenesisBlock) -> Result<()> {
|
pub fn create_empty_ledger(ledger_path: &str, genesis_block: &GenesisBlock) -> Result<(u64, Hash)> {
|
||||||
DbLedger::destroy(ledger_path)?;
|
DbLedger::destroy(ledger_path)?;
|
||||||
DbLedger::open(ledger_path)?;
|
DbLedger::open(ledger_path)?;
|
||||||
genesis_block.write(&ledger_path)?;
|
genesis_block.write(&ledger_path)?;
|
||||||
Ok(())
|
Ok((0, genesis_block.last_id()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn genesis<'a, I>(ledger_path: &str, keypair: &Keypair, entries: I) -> Result<()>
|
pub fn genesis<'a, I>(ledger_path: &str, keypair: &Keypair, entries: I) -> Result<()>
|
||||||
@ -898,19 +898,23 @@ pub fn create_tmp_sample_ledger(
|
|||||||
num_ending_ticks: u64,
|
num_ending_ticks: u64,
|
||||||
bootstrap_leader_id: Pubkey,
|
bootstrap_leader_id: Pubkey,
|
||||||
bootstrap_leader_tokens: u64,
|
bootstrap_leader_tokens: u64,
|
||||||
) -> (GenesisBlock, Keypair, String, Vec<Entry>) {
|
) -> (GenesisBlock, Keypair, String, u64, Hash) {
|
||||||
let (genesis_block, mint_keypair) =
|
let (genesis_block, mint_keypair) =
|
||||||
GenesisBlock::new_with_leader(num_tokens, bootstrap_leader_id, bootstrap_leader_tokens);
|
GenesisBlock::new_with_leader(num_tokens, bootstrap_leader_id, bootstrap_leader_tokens);
|
||||||
let path = get_tmp_ledger_path(name);
|
let path = get_tmp_ledger_path(name);
|
||||||
create_empty_ledger(&path, &genesis_block).unwrap();
|
let (mut entry_height, mut last_id) = create_empty_ledger(&path, &genesis_block).unwrap();
|
||||||
|
|
||||||
let entries = crate::entry::create_ticks(num_ending_ticks, genesis_block.last_id());
|
if num_ending_ticks > 0 {
|
||||||
|
let entries = crate::entry::create_ticks(num_ending_ticks, last_id);
|
||||||
|
|
||||||
let db_ledger = DbLedger::open(&path).unwrap();
|
let db_ledger = DbLedger::open(&path).unwrap();
|
||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(DEFAULT_SLOT_HEIGHT, 0, &entries)
|
.write_entries(DEFAULT_SLOT_HEIGHT, entry_height, &entries)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
(genesis_block, mint_keypair, path, entries)
|
entry_height += entries.len() as u64;
|
||||||
|
last_id = entries.last().unwrap().id
|
||||||
|
}
|
||||||
|
(genesis_block, mint_keypair, path, entry_height, last_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn tmp_copy_ledger(from: &str, name: &str) -> String {
|
pub fn tmp_copy_ledger(from: &str, name: &str) -> String {
|
||||||
|
@ -531,20 +531,20 @@ mod tests {
|
|||||||
let bootstrap_leader_info = bootstrap_leader_node.info.clone();
|
let bootstrap_leader_info = bootstrap_leader_node.info.clone();
|
||||||
|
|
||||||
// Make a mint and a genesis entries for leader ledger
|
// Make a mint and a genesis entries for leader ledger
|
||||||
let num_ending_ticks = 1;
|
let (
|
||||||
let (_genesis_block, _mint_keypair, bootstrap_leader_ledger_path, genesis_entries) =
|
_genesis_block,
|
||||||
create_tmp_sample_ledger(
|
_mint_keypair,
|
||||||
|
bootstrap_leader_ledger_path,
|
||||||
|
_genesis_entry_height,
|
||||||
|
_last_id,
|
||||||
|
) = create_tmp_sample_ledger(
|
||||||
"test_leader_to_leader_transition",
|
"test_leader_to_leader_transition",
|
||||||
10_000,
|
10_000,
|
||||||
num_ending_ticks,
|
1,
|
||||||
bootstrap_leader_keypair.pubkey(),
|
bootstrap_leader_keypair.pubkey(),
|
||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
|
|
||||||
let initial_tick_height = genesis_entries
|
|
||||||
.iter()
|
|
||||||
.fold(0, |tick_count, entry| tick_count + entry.is_tick() as u64);
|
|
||||||
|
|
||||||
// Create the common leader scheduling configuration
|
// Create the common leader scheduling configuration
|
||||||
let num_slots_per_epoch = 3;
|
let num_slots_per_epoch = 3;
|
||||||
let leader_rotation_interval = 5;
|
let leader_rotation_interval = 5;
|
||||||
@ -556,9 +556,8 @@ mod tests {
|
|||||||
// choices in the active set, this leader will remain the leader in the next
|
// choices in the active set, this leader will remain the leader in the next
|
||||||
// epoch. In the next epoch, check that the same leader knows to shut down and
|
// epoch. In the next epoch, check that the same leader knows to shut down and
|
||||||
// restart as a leader again.
|
// restart as a leader again.
|
||||||
let bootstrap_height = initial_tick_height + 1;
|
|
||||||
let leader_scheduler_config = LeaderSchedulerConfig::new(
|
let leader_scheduler_config = LeaderSchedulerConfig::new(
|
||||||
bootstrap_height as u64,
|
2,
|
||||||
leader_rotation_interval,
|
leader_rotation_interval,
|
||||||
seed_rotation_interval,
|
seed_rotation_interval,
|
||||||
active_window_length,
|
active_window_length,
|
||||||
@ -591,6 +590,8 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_wrong_role_transition() {
|
fn test_wrong_role_transition() {
|
||||||
|
solana_logger::setup();
|
||||||
|
|
||||||
// Create the leader node information
|
// Create the leader node information
|
||||||
let bootstrap_leader_keypair = Arc::new(Keypair::new());
|
let bootstrap_leader_keypair = Arc::new(Keypair::new());
|
||||||
let bootstrap_leader_node =
|
let bootstrap_leader_node =
|
||||||
@ -602,43 +603,32 @@ mod tests {
|
|||||||
let validator_node = Node::new_localhost_with_pubkey(validator_keypair.pubkey());
|
let validator_node = Node::new_localhost_with_pubkey(validator_keypair.pubkey());
|
||||||
|
|
||||||
// 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 = 3;
|
let (
|
||||||
let (_genesis_block, mint_keypair, bootstrap_leader_ledger_path, genesis_entries) =
|
_genesis_block,
|
||||||
create_tmp_sample_ledger(
|
mint_keypair,
|
||||||
|
bootstrap_leader_ledger_path,
|
||||||
|
genesis_entry_height,
|
||||||
|
last_id,
|
||||||
|
) = create_tmp_sample_ledger(
|
||||||
"test_wrong_role_transition",
|
"test_wrong_role_transition",
|
||||||
10_000,
|
10_000,
|
||||||
num_ending_ticks,
|
0,
|
||||||
bootstrap_leader_keypair.pubkey(),
|
bootstrap_leader_keypair.pubkey(),
|
||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
|
|
||||||
let last_id = genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
// Write the entries to the ledger that will cause leader rotation
|
// Write the entries to the ledger that will cause leader rotation
|
||||||
// after the bootstrap height
|
// after the bootstrap height
|
||||||
let validator_keypair = Arc::new(validator_keypair);
|
let validator_keypair = Arc::new(validator_keypair);
|
||||||
let (active_set_entries, validator_vote_account_id) = make_active_set_entries(
|
let (active_set_entries, _) =
|
||||||
&validator_keypair,
|
make_active_set_entries(&validator_keypair, &mint_keypair, &last_id, &last_id, 10);
|
||||||
&mint_keypair,
|
|
||||||
&last_id,
|
|
||||||
&last_id,
|
|
||||||
num_ending_ticks,
|
|
||||||
);
|
|
||||||
|
|
||||||
let genesis_tick_height = genesis_entries
|
|
||||||
.iter()
|
|
||||||
.fold(0, |tick_count, entry| tick_count + entry.is_tick() as u64)
|
|
||||||
+ num_ending_ticks as u64;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
let db_ledger = DbLedger::open(&bootstrap_leader_ledger_path).unwrap();
|
let db_ledger = DbLedger::open(&bootstrap_leader_ledger_path).unwrap();
|
||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(
|
.write_entries(
|
||||||
DEFAULT_SLOT_HEIGHT,
|
DEFAULT_SLOT_HEIGHT,
|
||||||
genesis_entries.len() as u64,
|
genesis_entry_height,
|
||||||
&active_set_entries,
|
&active_set_entries,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -652,30 +642,26 @@ mod tests {
|
|||||||
];
|
];
|
||||||
|
|
||||||
// Create the common leader scheduling configuration
|
// Create the common leader scheduling configuration
|
||||||
let num_slots_per_epoch = 3;
|
let leader_rotation_interval = 3;
|
||||||
let leader_rotation_interval = 5;
|
|
||||||
let seed_rotation_interval = num_slots_per_epoch * leader_rotation_interval;
|
|
||||||
|
|
||||||
// Set the bootstrap height exactly the current tick height, so that we can
|
// Set the bootstrap height exactly the current tick height, so that we can
|
||||||
// test if the bootstrap leader knows to immediately transition to a validator
|
// test if the bootstrap leader knows to immediately transition to a validator
|
||||||
// after parsing the ledger during startup
|
// after parsing the ledger during startup
|
||||||
let bootstrap_height = genesis_tick_height;
|
|
||||||
let leader_scheduler_config = LeaderSchedulerConfig::new(
|
let leader_scheduler_config = LeaderSchedulerConfig::new(
|
||||||
bootstrap_height,
|
1,
|
||||||
leader_rotation_interval,
|
leader_rotation_interval,
|
||||||
seed_rotation_interval,
|
leader_rotation_interval,
|
||||||
genesis_tick_height,
|
leader_rotation_interval * 10,
|
||||||
);
|
);
|
||||||
|
|
||||||
{
|
{
|
||||||
// Test that a node knows to transition to a validator based on parsing the ledger
|
// Test that a node knows to transition to a validator based on parsing the ledger
|
||||||
let vote_signer = VoteSignerProxy::new_local(&bootstrap_leader_keypair);
|
|
||||||
let bootstrap_leader = Fullnode::new(
|
let bootstrap_leader = Fullnode::new(
|
||||||
bootstrap_leader_node,
|
bootstrap_leader_node,
|
||||||
bootstrap_leader_keypair,
|
bootstrap_leader_keypair,
|
||||||
&bootstrap_leader_ledger_path,
|
&bootstrap_leader_ledger_path,
|
||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(vote_signer)),
|
None,
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
Default::default(),
|
Default::default(),
|
||||||
);
|
);
|
||||||
@ -688,7 +674,7 @@ mod tests {
|
|||||||
validator_keypair,
|
validator_keypair,
|
||||||
&validator_ledger_path,
|
&validator_ledger_path,
|
||||||
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config))),
|
||||||
Some(Arc::new(validator_vote_account_id)),
|
None,
|
||||||
Some(&bootstrap_leader_info),
|
Some(&bootstrap_leader_info),
|
||||||
Default::default(),
|
Default::default(),
|
||||||
);
|
);
|
||||||
@ -714,12 +700,11 @@ mod tests {
|
|||||||
let leader_id = leader_node.info.id;
|
let leader_id = leader_node.info.id;
|
||||||
|
|
||||||
// Create validator identity
|
// Create validator identity
|
||||||
let num_ending_ticks = 1;
|
let (_genesis_block, mint_keypair, validator_ledger_path, genesis_entry_height, last_id) =
|
||||||
let (_genesis_block, mint_keypair, validator_ledger_path, genesis_entries) =
|
|
||||||
create_tmp_sample_ledger(
|
create_tmp_sample_ledger(
|
||||||
"test_validator_to_leader_transition",
|
"test_validator_to_leader_transition",
|
||||||
10_000,
|
10_000,
|
||||||
num_ending_ticks,
|
1,
|
||||||
leader_id,
|
leader_id,
|
||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
@ -728,11 +713,6 @@ mod tests {
|
|||||||
let validator_node = Node::new_localhost_with_pubkey(validator_keypair.pubkey());
|
let validator_node = Node::new_localhost_with_pubkey(validator_keypair.pubkey());
|
||||||
let validator_info = validator_node.info.clone();
|
let validator_info = validator_node.info.clone();
|
||||||
|
|
||||||
let mut last_id = genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
let validator_keypair = Arc::new(validator_keypair);
|
let validator_keypair = Arc::new(validator_keypair);
|
||||||
// Write two entries so that the validator is in the active set:
|
// Write two entries so that the validator is in the active set:
|
||||||
//
|
//
|
||||||
@ -741,27 +721,23 @@ mod tests {
|
|||||||
// after the bootstrap height
|
// after the bootstrap height
|
||||||
//
|
//
|
||||||
// 2) A vote from the validator
|
// 2) A vote from the validator
|
||||||
let (active_set_entries, _validator_vote_account_id) =
|
let (active_set_entries, _) =
|
||||||
make_active_set_entries(&validator_keypair, &mint_keypair, &last_id, &last_id, 0);
|
make_active_set_entries(&validator_keypair, &mint_keypair, &last_id, &last_id, 0);
|
||||||
let initial_tick_height = genesis_entries
|
|
||||||
.iter()
|
|
||||||
.fold(0, |tick_count, entry| tick_count + entry.is_tick() as u64);
|
|
||||||
let initial_non_tick_height = genesis_entries.len() as u64 - initial_tick_height;
|
|
||||||
let active_set_entries_len = active_set_entries.len() as u64;
|
let active_set_entries_len = active_set_entries.len() as u64;
|
||||||
last_id = active_set_entries.last().unwrap().id;
|
let last_id = active_set_entries.last().unwrap().id;
|
||||||
|
|
||||||
{
|
{
|
||||||
let db_ledger = DbLedger::open(&validator_ledger_path).unwrap();
|
let db_ledger = DbLedger::open(&validator_ledger_path).unwrap();
|
||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(
|
.write_entries(
|
||||||
DEFAULT_SLOT_HEIGHT,
|
DEFAULT_SLOT_HEIGHT,
|
||||||
genesis_entries.len() as u64,
|
genesis_entry_height,
|
||||||
&active_set_entries,
|
&active_set_entries,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
let ledger_initial_len = genesis_entries.len() as u64 + active_set_entries_len;
|
let ledger_initial_len = genesis_entry_height + active_set_entries_len;
|
||||||
|
|
||||||
// Set the leader scheduler for the validator
|
// Set the leader scheduler for the validator
|
||||||
let leader_rotation_interval = 16;
|
let leader_rotation_interval = 16;
|
||||||
@ -850,9 +826,7 @@ mod tests {
|
|||||||
assert!(bank.tick_height() >= bootstrap_height);
|
assert!(bank.tick_height() >= bootstrap_height);
|
||||||
// Only the first genesis entry has num_hashes = 0, every other entry
|
// Only the first genesis entry has num_hashes = 0, every other entry
|
||||||
// had num_hashes = 1
|
// had num_hashes = 1
|
||||||
assert!(
|
assert!(entry_height >= bootstrap_height + active_set_entries_len);
|
||||||
entry_height >= bootstrap_height + active_set_entries_len + initial_non_tick_height
|
|
||||||
);
|
|
||||||
|
|
||||||
// Shut down
|
// Shut down
|
||||||
t_responder.join().expect("responder thread join");
|
t_responder.join().expect("responder thread join");
|
||||||
|
@ -64,7 +64,7 @@ impl ReplayStage {
|
|||||||
cluster_info: &Arc<RwLock<ClusterInfo>>,
|
cluster_info: &Arc<RwLock<ClusterInfo>>,
|
||||||
window_receiver: &EntryReceiver,
|
window_receiver: &EntryReceiver,
|
||||||
keypair: &Arc<Keypair>,
|
keypair: &Arc<Keypair>,
|
||||||
vote_signer: Option<&Arc<VoteSignerProxy>>,
|
vote_signer_proxy: Option<&Arc<VoteSignerProxy>>,
|
||||||
vote_blob_sender: Option<&BlobSender>,
|
vote_blob_sender: Option<&BlobSender>,
|
||||||
ledger_entry_sender: &EntrySender,
|
ledger_entry_sender: &EntrySender,
|
||||||
entry_height: &Arc<RwLock<u64>>,
|
entry_height: &Arc<RwLock<u64>>,
|
||||||
@ -146,7 +146,7 @@ impl ReplayStage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if 0 == num_ticks_to_next_vote {
|
if 0 == num_ticks_to_next_vote {
|
||||||
if let Some(signer) = vote_signer {
|
if let Some(signer) = vote_signer_proxy {
|
||||||
if let Some(sender) = vote_blob_sender {
|
if let Some(sender) = vote_blob_sender {
|
||||||
signer
|
signer
|
||||||
.send_validator_vote(bank, &cluster_info, sender)
|
.send_validator_vote(bank, &cluster_info, sender)
|
||||||
@ -206,7 +206,7 @@ impl ReplayStage {
|
|||||||
#[allow(clippy::new_ret_no_self, clippy::too_many_arguments)]
|
#[allow(clippy::new_ret_no_self, clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
keypair: Arc<Keypair>,
|
keypair: Arc<Keypair>,
|
||||||
vote_signer: Option<Arc<VoteSignerProxy>>,
|
vote_signer_proxy: Option<Arc<VoteSignerProxy>>,
|
||||||
bank: Arc<Bank>,
|
bank: Arc<Bank>,
|
||||||
cluster_info: Arc<RwLock<ClusterInfo>>,
|
cluster_info: Arc<RwLock<ClusterInfo>>,
|
||||||
window_receiver: EntryReceiver,
|
window_receiver: EntryReceiver,
|
||||||
@ -252,7 +252,7 @@ impl ReplayStage {
|
|||||||
&cluster_info,
|
&cluster_info,
|
||||||
&window_receiver,
|
&window_receiver,
|
||||||
&keypair,
|
&keypair,
|
||||||
vote_signer.as_ref(),
|
vote_signer_proxy.as_ref(),
|
||||||
Some(&vote_blob_sender),
|
Some(&vote_blob_sender),
|
||||||
&ledger_entry_sender,
|
&ledger_entry_sender,
|
||||||
&entry_height_.clone(),
|
&entry_height_.clone(),
|
||||||
@ -328,38 +328,33 @@ mod test {
|
|||||||
|
|
||||||
// Create a ledger
|
// Create a ledger
|
||||||
let num_ending_ticks = 3;
|
let num_ending_ticks = 3;
|
||||||
let (_, mint_keypair, my_ledger_path, genesis_entries) = create_tmp_sample_ledger(
|
let (_, mint_keypair, my_ledger_path, genesis_entry_height, mut last_id) =
|
||||||
|
create_tmp_sample_ledger(
|
||||||
"test_replay_stage_leader_rotation_exit",
|
"test_replay_stage_leader_rotation_exit",
|
||||||
10_000,
|
10_000,
|
||||||
num_ending_ticks,
|
num_ending_ticks,
|
||||||
old_leader_id,
|
old_leader_id,
|
||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
let mut last_id = genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
let my_keypair = Arc::new(my_keypair);
|
let my_keypair = Arc::new(my_keypair);
|
||||||
// Write two entries to the ledger so that the validator is in the active set:
|
// Write two entries to the ledger so that the validator is in the active set:
|
||||||
// 1) Give the validator a nonzero number of tokens 2) A vote from the validator .
|
// 1) Give the validator a nonzero number of tokens 2) A vote from the validator .
|
||||||
// This will cause leader rotation after the bootstrap height
|
// This will cause leader rotation after the bootstrap height
|
||||||
let (active_set_entries, vote_account_id) =
|
let (active_set_entries, vote_signer_proxy) =
|
||||||
make_active_set_entries(&my_keypair, &mint_keypair, &last_id, &last_id, 0);
|
make_active_set_entries(&my_keypair, &mint_keypair, &last_id, &last_id, 0);
|
||||||
last_id = active_set_entries.last().unwrap().id;
|
last_id = active_set_entries.last().unwrap().id;
|
||||||
let initial_tick_height = genesis_entries
|
let initial_tick_height = genesis_entry_height;
|
||||||
.iter()
|
|
||||||
.fold(0, |tick_count, entry| tick_count + entry.is_tick() as u64);
|
|
||||||
let active_set_entries_len = active_set_entries.len() as u64;
|
let active_set_entries_len = active_set_entries.len() as u64;
|
||||||
let initial_non_tick_height = genesis_entries.len() as u64 - initial_tick_height;
|
let initial_non_tick_height = genesis_entry_height - initial_tick_height;
|
||||||
let initial_entry_len = genesis_entries.len() as u64 + active_set_entries_len;
|
let initial_entry_len = genesis_entry_height + active_set_entries_len;
|
||||||
|
|
||||||
{
|
{
|
||||||
let db_ledger = DbLedger::open(&my_ledger_path).unwrap();
|
let db_ledger = DbLedger::open(&my_ledger_path).unwrap();
|
||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(
|
.write_entries(
|
||||||
DEFAULT_SLOT_HEIGHT,
|
DEFAULT_SLOT_HEIGHT,
|
||||||
genesis_entries.len() as u64,
|
genesis_entry_height,
|
||||||
&active_set_entries,
|
&active_set_entries,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -390,7 +385,7 @@ mod test {
|
|||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
let (_replay_stage, ledger_writer_recv) = ReplayStage::new(
|
let (_replay_stage, ledger_writer_recv) = ReplayStage::new(
|
||||||
my_keypair,
|
my_keypair,
|
||||||
Some(Arc::new(vote_account_id)),
|
Some(Arc::new(vote_signer_proxy)),
|
||||||
Arc::new(bank),
|
Arc::new(bank),
|
||||||
Arc::new(RwLock::new(cluster_info_me)),
|
Arc::new(RwLock::new(cluster_info_me)),
|
||||||
entry_receiver,
|
entry_receiver,
|
||||||
@ -466,8 +461,7 @@ mod test {
|
|||||||
let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::default()));
|
let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::default()));
|
||||||
|
|
||||||
let num_ending_ticks = 1;
|
let num_ending_ticks = 1;
|
||||||
let (_genesis_block, _mint_keypair, my_ledger_path, genesis_entries) =
|
let (_, _, my_ledger_path, _, _) = create_tmp_sample_ledger(
|
||||||
create_tmp_sample_ledger(
|
|
||||||
"test_vote_error_replay_stage_correctness",
|
"test_vote_error_replay_stage_correctness",
|
||||||
10_000,
|
10_000,
|
||||||
num_ending_ticks,
|
num_ending_ticks,
|
||||||
@ -475,10 +469,8 @@ mod test {
|
|||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
|
|
||||||
let initial_entry_len = genesis_entries.len();
|
|
||||||
|
|
||||||
// Set up the bank
|
// Set up the bank
|
||||||
let (bank, _, last_entry_id) =
|
let (bank, entry_height, last_id) =
|
||||||
Fullnode::new_bank_from_ledger(&my_ledger_path, leader_scheduler);
|
Fullnode::new_bank_from_ledger(&my_ledger_path, leader_scheduler);
|
||||||
|
|
||||||
// Set up the cluster info
|
// Set up the cluster info
|
||||||
@ -489,17 +481,17 @@ mod test {
|
|||||||
let (entry_sender, entry_receiver) = channel();
|
let (entry_sender, entry_receiver) = channel();
|
||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
let my_keypair = Arc::new(my_keypair);
|
let my_keypair = Arc::new(my_keypair);
|
||||||
let vote_signer = Arc::new(VoteSignerProxy::new_local(&my_keypair));
|
let vote_signer_proxy = Arc::new(VoteSignerProxy::new_local(&my_keypair));
|
||||||
let (to_leader_sender, _) = channel();
|
let (to_leader_sender, _) = channel();
|
||||||
let (replay_stage, ledger_writer_recv) = ReplayStage::new(
|
let (replay_stage, ledger_writer_recv) = ReplayStage::new(
|
||||||
my_keypair.clone(),
|
my_keypair.clone(),
|
||||||
Some(vote_signer.clone()),
|
Some(vote_signer_proxy.clone()),
|
||||||
bank.clone(),
|
bank.clone(),
|
||||||
cluster_info_me.clone(),
|
cluster_info_me.clone(),
|
||||||
entry_receiver,
|
entry_receiver,
|
||||||
exit.clone(),
|
exit.clone(),
|
||||||
Arc::new(RwLock::new(initial_entry_len as u64)),
|
Arc::new(RwLock::new(entry_height)),
|
||||||
Arc::new(RwLock::new(last_entry_id)),
|
Arc::new(RwLock::new(last_id)),
|
||||||
to_leader_sender,
|
to_leader_sender,
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
@ -507,16 +499,11 @@ mod test {
|
|||||||
// Vote sender should error because no leader contact info is found in the
|
// Vote sender should error because no leader contact info is found in the
|
||||||
// ClusterInfo
|
// ClusterInfo
|
||||||
let (mock_sender, _mock_receiver) = channel();
|
let (mock_sender, _mock_receiver) = channel();
|
||||||
let _vote_err = vote_signer.send_validator_vote(&bank, &cluster_info_me, &mock_sender);
|
let _vote_err =
|
||||||
|
vote_signer_proxy.send_validator_vote(&bank, &cluster_info_me, &mock_sender);
|
||||||
|
|
||||||
// Send ReplayStage an entry, should see it on the ledger writer receiver
|
// Send ReplayStage an entry, should see it on the ledger writer receiver
|
||||||
let next_tick = create_ticks(
|
let next_tick = create_ticks(1, last_id);
|
||||||
1,
|
|
||||||
genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("Expected nonzero number of entries in genesis")
|
|
||||||
.id,
|
|
||||||
);
|
|
||||||
entry_sender
|
entry_sender
|
||||||
.send(next_tick.clone())
|
.send(next_tick.clone())
|
||||||
.expect("Error sending entry to ReplayStage");
|
.expect("Error sending entry to ReplayStage");
|
||||||
@ -543,7 +530,7 @@ mod test {
|
|||||||
let leader_id = Keypair::new().pubkey();
|
let leader_id = Keypair::new().pubkey();
|
||||||
|
|
||||||
// Create the ledger
|
// Create the ledger
|
||||||
let (_genesis_block, mint_keypair, my_ledger_path, genesis_entries) =
|
let (_genesis_block, mint_keypair, my_ledger_path, genesis_entry_height, last_id) =
|
||||||
create_tmp_sample_ledger(
|
create_tmp_sample_ledger(
|
||||||
"test_vote_error_replay_stage_leader_rotation",
|
"test_vote_error_replay_stage_leader_rotation",
|
||||||
10_000,
|
10_000,
|
||||||
@ -552,31 +539,24 @@ mod test {
|
|||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut last_id = genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
let my_keypair = Arc::new(my_keypair);
|
let my_keypair = Arc::new(my_keypair);
|
||||||
// Write two entries to the ledger so that the validator is in the active set:
|
// Write two entries to the ledger so that the validator is in the active set:
|
||||||
// 1) Give the validator a nonzero number of tokens 2) A vote from the validator.
|
// 1) Give the validator a nonzero number of tokens 2) A vote from the validator.
|
||||||
// This will cause leader rotation after the bootstrap height
|
// This will cause leader rotation after the bootstrap height
|
||||||
let (active_set_entries, vote_account_id) =
|
let (active_set_entries, vote_signer_proxy) =
|
||||||
make_active_set_entries(&my_keypair, &mint_keypair, &last_id, &last_id, 0);
|
make_active_set_entries(&my_keypair, &mint_keypair, &last_id, &last_id, 0);
|
||||||
last_id = active_set_entries.last().unwrap().id;
|
let mut last_id = active_set_entries.last().unwrap().id;
|
||||||
let initial_tick_height = genesis_entries
|
let initial_tick_height = genesis_entry_height;
|
||||||
.iter()
|
|
||||||
.fold(0, |tick_count, entry| tick_count + entry.is_tick() as u64);
|
|
||||||
let active_set_entries_len = active_set_entries.len() as u64;
|
let active_set_entries_len = active_set_entries.len() as u64;
|
||||||
let initial_non_tick_height = genesis_entries.len() as u64 - initial_tick_height;
|
let initial_non_tick_height = genesis_entry_height - initial_tick_height;
|
||||||
let initial_entry_len = genesis_entries.len() as u64 + active_set_entries_len;
|
let initial_entry_len = genesis_entry_height + active_set_entries_len;
|
||||||
|
|
||||||
{
|
{
|
||||||
let db_ledger = DbLedger::open(&my_ledger_path).unwrap();
|
let db_ledger = DbLedger::open(&my_ledger_path).unwrap();
|
||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(
|
.write_entries(
|
||||||
DEFAULT_SLOT_HEIGHT,
|
DEFAULT_SLOT_HEIGHT,
|
||||||
genesis_entries.len() as u64,
|
genesis_entry_height,
|
||||||
&active_set_entries,
|
&active_set_entries,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -605,14 +585,14 @@ mod test {
|
|||||||
let cluster_info_me = Arc::new(RwLock::new(ClusterInfo::new(my_node.info.clone())));
|
let cluster_info_me = Arc::new(RwLock::new(ClusterInfo::new(my_node.info.clone())));
|
||||||
|
|
||||||
// Set up the replay stage
|
// Set up the replay stage
|
||||||
let signer_proxy = Arc::new(vote_account_id);
|
let vote_signer_proxy = Arc::new(vote_signer_proxy);
|
||||||
let bank = Arc::new(bank);
|
let bank = Arc::new(bank);
|
||||||
let (entry_sender, entry_receiver) = channel();
|
let (entry_sender, entry_receiver) = channel();
|
||||||
let (rotation_tx, rotation_rx) = channel();
|
let (rotation_tx, rotation_rx) = channel();
|
||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
let (_replay_stage, ledger_writer_recv) = ReplayStage::new(
|
let (_replay_stage, ledger_writer_recv) = ReplayStage::new(
|
||||||
my_keypair.clone(),
|
my_keypair.clone(),
|
||||||
Some(signer_proxy.clone()),
|
Some(vote_signer_proxy.clone()),
|
||||||
bank.clone(),
|
bank.clone(),
|
||||||
cluster_info_me.clone(),
|
cluster_info_me.clone(),
|
||||||
entry_receiver,
|
entry_receiver,
|
||||||
@ -626,7 +606,8 @@ mod test {
|
|||||||
// Vote sender should error because no leader contact info is found in the
|
// Vote sender should error because no leader contact info is found in the
|
||||||
// ClusterInfo
|
// ClusterInfo
|
||||||
let (mock_sender, _mock_receiver) = channel();
|
let (mock_sender, _mock_receiver) = channel();
|
||||||
let _vote_err = signer_proxy.send_validator_vote(&bank, &cluster_info_me, &mock_sender);
|
let _vote_err =
|
||||||
|
vote_signer_proxy.send_validator_vote(&bank, &cluster_info_me, &mock_sender);
|
||||||
|
|
||||||
// Send enough ticks to trigger leader rotation
|
// Send enough ticks to trigger leader rotation
|
||||||
let total_entries_to_send = (bootstrap_height - initial_tick_height) as usize;
|
let total_entries_to_send = (bootstrap_height - initial_tick_height) as usize;
|
||||||
@ -705,13 +686,13 @@ mod test {
|
|||||||
.expect("Expected to err out");
|
.expect("Expected to err out");
|
||||||
|
|
||||||
let my_keypair = Arc::new(my_keypair);
|
let my_keypair = Arc::new(my_keypair);
|
||||||
let vote_signer = Arc::new(VoteSignerProxy::new_local(&my_keypair));
|
let vote_signer_proxy = Arc::new(VoteSignerProxy::new_local(&my_keypair));
|
||||||
let res = ReplayStage::process_entries(
|
let res = ReplayStage::process_entries(
|
||||||
&Arc::new(Bank::default()),
|
&Arc::new(Bank::default()),
|
||||||
&cluster_info_me,
|
&cluster_info_me,
|
||||||
&entry_receiver,
|
&entry_receiver,
|
||||||
&my_keypair,
|
&my_keypair,
|
||||||
Some(&vote_signer),
|
Some(&vote_signer_proxy),
|
||||||
None,
|
None,
|
||||||
&ledger_entry_sender,
|
&ledger_entry_sender,
|
||||||
&Arc::new(RwLock::new(entry_height)),
|
&Arc::new(RwLock::new(entry_height)),
|
||||||
@ -738,7 +719,7 @@ mod test {
|
|||||||
&cluster_info_me,
|
&cluster_info_me,
|
||||||
&entry_receiver,
|
&entry_receiver,
|
||||||
&Arc::new(Keypair::new()),
|
&Arc::new(Keypair::new()),
|
||||||
Some(&vote_signer),
|
Some(&vote_signer_proxy),
|
||||||
None,
|
None,
|
||||||
&ledger_entry_sender,
|
&ledger_entry_sender,
|
||||||
&Arc::new(RwLock::new(entry_height)),
|
&Arc::new(RwLock::new(entry_height)),
|
||||||
@ -787,13 +768,13 @@ mod test {
|
|||||||
.expect("Expected to err out");
|
.expect("Expected to err out");
|
||||||
|
|
||||||
let my_keypair = Arc::new(my_keypair);
|
let my_keypair = Arc::new(my_keypair);
|
||||||
let vote_signer = Arc::new(VoteSignerProxy::new_local(&my_keypair));
|
let vote_signer_proxy = Arc::new(VoteSignerProxy::new_local(&my_keypair));
|
||||||
ReplayStage::process_entries(
|
ReplayStage::process_entries(
|
||||||
&Arc::new(Bank::default()),
|
&Arc::new(Bank::default()),
|
||||||
&cluster_info_me,
|
&cluster_info_me,
|
||||||
&entry_receiver,
|
&entry_receiver,
|
||||||
&my_keypair,
|
&my_keypair,
|
||||||
Some(&vote_signer),
|
Some(&vote_signer_proxy),
|
||||||
None,
|
None,
|
||||||
&ledger_entry_sender,
|
&ledger_entry_sender,
|
||||||
&Arc::new(RwLock::new(entry_height)),
|
&Arc::new(RwLock::new(entry_height)),
|
||||||
|
@ -498,7 +498,8 @@ mod tests {
|
|||||||
let keypair = Arc::new(Keypair::new());
|
let keypair = Arc::new(Keypair::new());
|
||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
|
|
||||||
let (_genesis_block, _mint, ledger_path, genesis_entries) = create_tmp_sample_ledger(
|
let (_genesis_block, _mint, ledger_path, genesis_entry_height, _last_id) =
|
||||||
|
create_tmp_sample_ledger(
|
||||||
"storage_stage_process_entries",
|
"storage_stage_process_entries",
|
||||||
1000,
|
1000,
|
||||||
1,
|
1,
|
||||||
@ -509,7 +510,7 @@ mod tests {
|
|||||||
let entries = make_tiny_test_entries(64);
|
let entries = make_tiny_test_entries(64);
|
||||||
let db_ledger = DbLedger::open(&ledger_path).unwrap();
|
let db_ledger = DbLedger::open(&ledger_path).unwrap();
|
||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(DEFAULT_SLOT_HEIGHT, genesis_entries.len() as u64, &entries)
|
.write_entries(DEFAULT_SLOT_HEIGHT, genesis_entry_height, &entries)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let cluster_info = test_cluster_info(keypair.pubkey());
|
let cluster_info = test_cluster_info(keypair.pubkey());
|
||||||
@ -566,7 +567,8 @@ mod tests {
|
|||||||
let keypair = Arc::new(Keypair::new());
|
let keypair = Arc::new(Keypair::new());
|
||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
|
|
||||||
let (_genesis_block, _mint, ledger_path, genesis_entries) = create_tmp_sample_ledger(
|
let (_genesis_block, _mint, ledger_path, genesis_entry_height, _last_id) =
|
||||||
|
create_tmp_sample_ledger(
|
||||||
"storage_stage_process_entries",
|
"storage_stage_process_entries",
|
||||||
1000,
|
1000,
|
||||||
1,
|
1,
|
||||||
@ -577,7 +579,7 @@ mod tests {
|
|||||||
let entries = make_tiny_test_entries(128);
|
let entries = make_tiny_test_entries(128);
|
||||||
let db_ledger = DbLedger::open(&ledger_path).unwrap();
|
let db_ledger = DbLedger::open(&ledger_path).unwrap();
|
||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(DEFAULT_SLOT_HEIGHT, genesis_entries.len() as u64, &entries)
|
.write_entries(DEFAULT_SLOT_HEIGHT, genesis_entry_height, &entries)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let cluster_info = test_cluster_info(keypair.pubkey());
|
let cluster_info = test_cluster_info(keypair.pubkey());
|
||||||
|
@ -965,7 +965,7 @@ fn test_leader_to_validator_transition() {
|
|||||||
// 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
|
||||||
let num_ending_ticks = 1;
|
let num_ending_ticks = 1;
|
||||||
let (_genesis_block, mint_keypair, leader_ledger_path, genesis_entries) =
|
let (_genesis_block, mint_keypair, leader_ledger_path, genesis_entry_height, last_id) =
|
||||||
create_tmp_sample_ledger(
|
create_tmp_sample_ledger(
|
||||||
"test_leader_to_validator_transition",
|
"test_leader_to_validator_transition",
|
||||||
10_000,
|
10_000,
|
||||||
@ -974,11 +974,6 @@ fn test_leader_to_validator_transition() {
|
|||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
|
|
||||||
let last_id = genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
// Write the bootstrap entries to the ledger that will cause leader rotation
|
// Write the bootstrap entries to the ledger that will cause leader rotation
|
||||||
// after the bootstrap height
|
// after the bootstrap height
|
||||||
let (bootstrap_entries, _) =
|
let (bootstrap_entries, _) =
|
||||||
@ -988,7 +983,7 @@ fn test_leader_to_validator_transition() {
|
|||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(
|
.write_entries(
|
||||||
DEFAULT_SLOT_HEIGHT,
|
DEFAULT_SLOT_HEIGHT,
|
||||||
genesis_entries.len() as u64,
|
genesis_entry_height,
|
||||||
&bootstrap_entries,
|
&bootstrap_entries,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -1110,7 +1105,7 @@ fn test_leader_validator_basic() {
|
|||||||
|
|
||||||
// Make a common mint and a genesis entry for both leader + validator ledgers
|
// Make a common mint and a genesis entry for both leader + validator ledgers
|
||||||
let num_ending_ticks = 1;
|
let num_ending_ticks = 1;
|
||||||
let (_genesis_block, mint_keypair, leader_ledger_path, genesis_entries) =
|
let (_genesis_block, mint_keypair, leader_ledger_path, genesis_entry_height, last_id) =
|
||||||
create_tmp_sample_ledger(
|
create_tmp_sample_ledger(
|
||||||
"test_leader_validator_basic",
|
"test_leader_validator_basic",
|
||||||
10_000,
|
10_000,
|
||||||
@ -1121,11 +1116,6 @@ fn test_leader_validator_basic() {
|
|||||||
|
|
||||||
let validator_ledger_path = tmp_copy_ledger(&leader_ledger_path, "test_leader_validator_basic");
|
let validator_ledger_path = tmp_copy_ledger(&leader_ledger_path, "test_leader_validator_basic");
|
||||||
|
|
||||||
let last_id = genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
// Initialize both leader + validator ledger
|
// Initialize both leader + validator ledger
|
||||||
let mut ledger_paths = Vec::new();
|
let mut ledger_paths = Vec::new();
|
||||||
ledger_paths.push(leader_ledger_path.clone());
|
ledger_paths.push(leader_ledger_path.clone());
|
||||||
@ -1133,14 +1123,14 @@ fn test_leader_validator_basic() {
|
|||||||
|
|
||||||
// Write the bootstrap entries to the ledger that will cause leader rotation
|
// Write the bootstrap entries to the ledger that will cause leader rotation
|
||||||
// after the bootstrap height
|
// after the bootstrap height
|
||||||
let (active_set_entries, _vote_account_keypair) =
|
let (active_set_entries, _) =
|
||||||
make_active_set_entries(&validator_keypair, &mint_keypair, &last_id, &last_id, 0);
|
make_active_set_entries(&validator_keypair, &mint_keypair, &last_id, &last_id, 0);
|
||||||
{
|
{
|
||||||
let db_ledger = DbLedger::open(&leader_ledger_path).unwrap();
|
let db_ledger = DbLedger::open(&leader_ledger_path).unwrap();
|
||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(
|
.write_entries(
|
||||||
DEFAULT_SLOT_HEIGHT,
|
DEFAULT_SLOT_HEIGHT,
|
||||||
genesis_entries.len() as u64,
|
genesis_entry_height,
|
||||||
&active_set_entries,
|
&active_set_entries,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -1298,7 +1288,7 @@ fn test_dropped_handoff_recovery() {
|
|||||||
|
|
||||||
// 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;
|
||||||
let (_genesis_block, mint_keypair, genesis_ledger_path, genesis_entries) =
|
let (_genesis_block, mint_keypair, genesis_ledger_path, genesis_entry_height, last_id) =
|
||||||
create_tmp_sample_ledger(
|
create_tmp_sample_ledger(
|
||||||
"test_dropped_handoff_recovery",
|
"test_dropped_handoff_recovery",
|
||||||
10_000,
|
10_000,
|
||||||
@ -1307,11 +1297,6 @@ fn test_dropped_handoff_recovery() {
|
|||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
|
|
||||||
let last_id = genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
// Create the validator keypair that will be the next leader in line
|
// Create the validator keypair that will be the next leader in line
|
||||||
let next_leader_keypair = Arc::new(Keypair::new());
|
let next_leader_keypair = Arc::new(Keypair::new());
|
||||||
|
|
||||||
@ -1323,7 +1308,7 @@ fn test_dropped_handoff_recovery() {
|
|||||||
|
|
||||||
// Make the entries to give the next_leader validator some stake so that they will be in
|
// Make the entries to give the next_leader validator some stake so that they will be in
|
||||||
// leader election active set
|
// leader election active set
|
||||||
let (active_set_entries, _vote_account_keypair) =
|
let (active_set_entries, _) =
|
||||||
make_active_set_entries(&next_leader_keypair, &mint_keypair, &last_id, &last_id, 0);
|
make_active_set_entries(&next_leader_keypair, &mint_keypair, &last_id, &last_id, 0);
|
||||||
|
|
||||||
// Write the entries
|
// Write the entries
|
||||||
@ -1332,7 +1317,7 @@ fn test_dropped_handoff_recovery() {
|
|||||||
db_ledger
|
db_ledger
|
||||||
.write_entries(
|
.write_entries(
|
||||||
DEFAULT_SLOT_HEIGHT,
|
DEFAULT_SLOT_HEIGHT,
|
||||||
genesis_entries.len() as u64,
|
genesis_entry_height,
|
||||||
&active_set_entries,
|
&active_set_entries,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -1343,9 +1328,7 @@ fn test_dropped_handoff_recovery() {
|
|||||||
ledger_paths.push(next_leader_ledger_path.clone());
|
ledger_paths.push(next_leader_ledger_path.clone());
|
||||||
|
|
||||||
// Create the common leader scheduling configuration
|
// Create the common leader scheduling configuration
|
||||||
let initial_tick_height = genesis_entries
|
let initial_tick_height = genesis_entry_height;
|
||||||
.iter()
|
|
||||||
.fold(0, |tick_count, entry| tick_count + entry.is_tick() as u64);
|
|
||||||
let num_slots_per_epoch = (N + 1) as u64;
|
let num_slots_per_epoch = (N + 1) as u64;
|
||||||
let leader_rotation_interval = 5;
|
let leader_rotation_interval = 5;
|
||||||
let seed_rotation_interval = num_slots_per_epoch * leader_rotation_interval;
|
let seed_rotation_interval = num_slots_per_epoch * leader_rotation_interval;
|
||||||
@ -1466,7 +1449,7 @@ fn test_full_leader_validator_network() {
|
|||||||
|
|
||||||
// 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;
|
||||||
let (_genesis_block, mint_keypair, bootstrap_leader_ledger_path, genesis_entries) =
|
let (_genesis_block, mint_keypair, bootstrap_leader_ledger_path, genesis_entry_height, last_id) =
|
||||||
create_tmp_sample_ledger(
|
create_tmp_sample_ledger(
|
||||||
"test_full_leader_validator_network",
|
"test_full_leader_validator_network",
|
||||||
10_000,
|
10_000,
|
||||||
@ -1475,15 +1458,8 @@ fn test_full_leader_validator_network() {
|
|||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
|
|
||||||
let last_tick_id = genesis_entries
|
let last_tick_id = last_id;
|
||||||
.last()
|
let mut last_entry_id = last_id;
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
let mut last_entry_id = genesis_entries
|
|
||||||
.last()
|
|
||||||
.expect("expected at least one genesis entry")
|
|
||||||
.id;
|
|
||||||
|
|
||||||
// Create a common ledger with entries in the beginnging that will add all the validators
|
// Create a common ledger with entries in the beginnging that will add all the validators
|
||||||
// to the active set for leader election. TODO: Leader rotation does not support dynamic
|
// to the active set for leader election. TODO: Leader rotation does not support dynamic
|
||||||
@ -1493,12 +1469,11 @@ fn test_full_leader_validator_network() {
|
|||||||
let mut ledger_paths = Vec::new();
|
let mut ledger_paths = Vec::new();
|
||||||
ledger_paths.push(bootstrap_leader_ledger_path.clone());
|
ledger_paths.push(bootstrap_leader_ledger_path.clone());
|
||||||
|
|
||||||
let mut vote_account_keypairs = VecDeque::new();
|
let mut index = genesis_entry_height;
|
||||||
let mut index = genesis_entries.len() as u64;
|
|
||||||
for node_keypair in node_keypairs.iter() {
|
for node_keypair in node_keypairs.iter() {
|
||||||
// Make entries to give each node some stake so that they will be in the
|
// Make entries to give each node some stake so that they will be in the
|
||||||
// leader election active set
|
// leader election active set
|
||||||
let (bootstrap_entries, vote_account_keypair) = make_active_set_entries(
|
let (bootstrap_entries, _) = make_active_set_entries(
|
||||||
node_keypair,
|
node_keypair,
|
||||||
&mint_keypair,
|
&mint_keypair,
|
||||||
&last_entry_id,
|
&last_entry_id,
|
||||||
@ -1506,8 +1481,6 @@ fn test_full_leader_validator_network() {
|
|||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
|
|
||||||
vote_account_keypairs.push_back(vote_account_keypair);
|
|
||||||
|
|
||||||
// Write the entries
|
// Write the entries
|
||||||
last_entry_id = bootstrap_entries
|
last_entry_id = bootstrap_entries
|
||||||
.last()
|
.last()
|
||||||
@ -1543,7 +1516,6 @@ fn test_full_leader_validator_network() {
|
|||||||
// 2) Modifying the leader ledger which validators are going to be copying
|
// 2) Modifying the leader ledger which validators are going to be copying
|
||||||
// during startup
|
// during startup
|
||||||
let leader_keypair = node_keypairs.pop_front().unwrap();
|
let leader_keypair = node_keypairs.pop_front().unwrap();
|
||||||
let _leader_vote_keypair = vote_account_keypairs.pop_front().unwrap();
|
|
||||||
let mut schedules: Vec<Arc<RwLock<LeaderScheduler>>> = vec![];
|
let mut schedules: Vec<Arc<RwLock<LeaderScheduler>>> = vec![];
|
||||||
let mut t_nodes = vec![];
|
let mut t_nodes = vec![];
|
||||||
|
|
||||||
@ -1708,8 +1680,13 @@ fn test_broadcast_last_tick() {
|
|||||||
let bootstrap_leader_info = bootstrap_leader_node.info.clone();
|
let bootstrap_leader_info = bootstrap_leader_node.info.clone();
|
||||||
|
|
||||||
// Create leader ledger
|
// Create leader ledger
|
||||||
let (_genesis_block, _mint_keypair, bootstrap_leader_ledger_path, genesis_entries) =
|
let (
|
||||||
create_tmp_sample_ledger(
|
_genesis_block,
|
||||||
|
_mint_keypair,
|
||||||
|
bootstrap_leader_ledger_path,
|
||||||
|
genesis_entry_height,
|
||||||
|
_last_id,
|
||||||
|
) = create_tmp_sample_ledger(
|
||||||
"test_broadcast_last_tick",
|
"test_broadcast_last_tick",
|
||||||
10_000,
|
10_000,
|
||||||
1,
|
1,
|
||||||
@ -1717,12 +1694,7 @@ fn test_broadcast_last_tick() {
|
|||||||
500,
|
500,
|
||||||
);
|
);
|
||||||
|
|
||||||
let num_ending_ticks = genesis_entries
|
let genesis_ledger_len = genesis_entry_height;
|
||||||
.iter()
|
|
||||||
.fold(0, |tick_count, entry| tick_count + entry.is_tick() as u64);
|
|
||||||
|
|
||||||
let genesis_ledger_len = genesis_entries.len() as u64 - num_ending_ticks;
|
|
||||||
debug!("num_ending_ticks: {}", num_ending_ticks);
|
|
||||||
debug!("genesis_ledger_len: {}", genesis_ledger_len);
|
debug!("genesis_ledger_len: {}", genesis_ledger_len);
|
||||||
let blob_receiver_exit = Arc::new(AtomicBool::new(false));
|
let blob_receiver_exit = Arc::new(AtomicBool::new(false));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user