Consolidate logic with entry helper function
Creates an entry and updates the hash. Also cleanup blobs creation in test_replay
This commit is contained in:
committed by
sakridge
parent
aec44e3761
commit
f1221d724d
@ -311,6 +311,12 @@ impl EntrySlice for [Entry] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn next_entry_mut(start: &mut Hash, num_hashes: u64, transactions: Vec<Transaction>) -> Entry {
|
||||||
|
let entry = Entry::new(&start, 0, num_hashes, transactions);
|
||||||
|
*start = entry.id;
|
||||||
|
entry
|
||||||
|
}
|
||||||
|
|
||||||
/// Creates the next entries for given transactions, outputs
|
/// Creates the next entries for given transactions, outputs
|
||||||
/// updates start_hash to id of last Entry, sets num_hashes to 0
|
/// updates start_hash to id of last Entry, sets num_hashes to 0
|
||||||
pub fn next_entries_mut(
|
pub fn next_entries_mut(
|
||||||
@ -389,8 +395,7 @@ pub fn next_entries(
|
|||||||
pub fn create_ticks(num_ticks: u64, mut hash: Hash) -> Vec<Entry> {
|
pub fn create_ticks(num_ticks: u64, mut hash: Hash) -> Vec<Entry> {
|
||||||
let mut ticks = Vec::with_capacity(num_ticks as usize);
|
let mut ticks = Vec::with_capacity(num_ticks as usize);
|
||||||
for _ in 0..num_ticks {
|
for _ in 0..num_ticks {
|
||||||
let new_tick = Entry::new(&hash, 0, 1, vec![]);
|
let new_tick = next_entry_mut(&mut hash, 1, vec![]);
|
||||||
hash = new_tick.id;
|
|
||||||
ticks.push(new_tick);
|
ticks.push(new_tick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//! managing the schedule for leader rotation
|
//! managing the schedule for leader rotation
|
||||||
|
|
||||||
use crate::bank::Bank;
|
use crate::bank::Bank;
|
||||||
use crate::entry::{create_ticks, Entry};
|
use crate::entry::{create_ticks, next_entry_mut, Entry};
|
||||||
use crate::voting_keypair::VotingKeypair;
|
use crate::voting_keypair::VotingKeypair;
|
||||||
use bincode::serialize;
|
use bincode::serialize;
|
||||||
use byteorder::{LittleEndian, ReadBytesExt};
|
use byteorder::{LittleEndian, ReadBytesExt};
|
||||||
@ -421,8 +421,8 @@ pub fn make_active_set_entries(
|
|||||||
*last_tick_id,
|
*last_tick_id,
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
let transfer_entry = Entry::new(last_entry_id, 0, 1, vec![transfer_tx]);
|
let mut last_entry_id = *last_entry_id;
|
||||||
let mut last_entry_id = transfer_entry.id;
|
let transfer_entry = next_entry_mut(&mut last_entry_id, 1, vec![transfer_tx]);
|
||||||
|
|
||||||
// 2) Create and register a vote account for active_keypair
|
// 2) Create and register a vote account for active_keypair
|
||||||
let voting_keypair = VotingKeypair::new_local(active_keypair);
|
let voting_keypair = VotingKeypair::new_local(active_keypair);
|
||||||
@ -430,14 +430,12 @@ pub fn make_active_set_entries(
|
|||||||
|
|
||||||
let new_vote_account_tx =
|
let new_vote_account_tx =
|
||||||
VoteTransaction::new_account(active_keypair, vote_account_id, *last_tick_id, 1, 1);
|
VoteTransaction::new_account(active_keypair, vote_account_id, *last_tick_id, 1, 1);
|
||||||
let new_vote_account_entry = Entry::new(&last_entry_id, 0, 1, vec![new_vote_account_tx]);
|
let new_vote_account_entry = next_entry_mut(&mut last_entry_id, 1, vec![new_vote_account_tx]);
|
||||||
last_entry_id = new_vote_account_entry.id;
|
|
||||||
|
|
||||||
// 3) Create vote entry
|
// 3) Create vote entry
|
||||||
let vote_tx =
|
let vote_tx =
|
||||||
VoteTransaction::new_vote(&voting_keypair, tick_height_to_vote_on, *last_tick_id, 0);
|
VoteTransaction::new_vote(&voting_keypair, tick_height_to_vote_on, *last_tick_id, 0);
|
||||||
let vote_entry = Entry::new(&last_entry_id, 0, 1, vec![vote_tx]);
|
let vote_entry = next_entry_mut(&mut last_entry_id, 1, vec![vote_tx]);
|
||||||
last_entry_id = vote_entry.id;
|
|
||||||
|
|
||||||
// 4) Create the ending empty ticks
|
// 4) Create the ending empty ticks
|
||||||
let mut txs = vec![transfer_entry, new_vote_account_entry, vote_entry];
|
let mut txs = vec![transfer_entry, new_vote_account_entry, vote_entry];
|
||||||
|
@ -363,7 +363,7 @@ mod test {
|
|||||||
};
|
};
|
||||||
use crate::cluster_info::{ClusterInfo, Node};
|
use crate::cluster_info::{ClusterInfo, Node};
|
||||||
use crate::entry::create_ticks;
|
use crate::entry::create_ticks;
|
||||||
use crate::entry::Entry;
|
use crate::entry::{next_entry_mut, Entry};
|
||||||
use crate::fullnode::new_bank_from_ledger;
|
use crate::fullnode::new_bank_from_ledger;
|
||||||
use crate::genesis_block::GenesisBlock;
|
use crate::genesis_block::GenesisBlock;
|
||||||
use crate::leader_scheduler::{make_active_set_entries, LeaderSchedulerConfig};
|
use crate::leader_scheduler::{make_active_set_entries, LeaderSchedulerConfig};
|
||||||
@ -469,8 +469,7 @@ mod test {
|
|||||||
let total_entries_to_send = 2 * ticks_per_slot as usize - 2;
|
let total_entries_to_send = 2 * ticks_per_slot as usize - 2;
|
||||||
let mut entries_to_send = vec![];
|
let mut entries_to_send = vec![];
|
||||||
while entries_to_send.len() < total_entries_to_send {
|
while entries_to_send.len() < total_entries_to_send {
|
||||||
let entry = Entry::new(&mut last_id, 0, 1, vec![]);
|
let entry = next_entry_mut(&mut last_id, 1, vec![]);
|
||||||
last_id = entry.id;
|
|
||||||
entries_to_send.push(entry);
|
entries_to_send.push(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -706,8 +705,7 @@ mod test {
|
|||||||
let leader_rotation_index = (active_window_tick_length - tick_height - 1) as usize;
|
let leader_rotation_index = (active_window_tick_length - tick_height - 1) as usize;
|
||||||
let mut expected_last_id = Hash::default();
|
let mut expected_last_id = Hash::default();
|
||||||
for i in 0..total_entries_to_send {
|
for i in 0..total_entries_to_send {
|
||||||
let entry = Entry::new(&mut last_id, 0, num_hashes, vec![]);
|
let entry = next_entry_mut(&mut last_id, num_hashes, vec![]);
|
||||||
last_id = entry.id;
|
|
||||||
blocktree
|
blocktree
|
||||||
.write_entries(
|
.write_entries(
|
||||||
DEFAULT_SLOT_HEIGHT,
|
DEFAULT_SLOT_HEIGHT,
|
||||||
@ -758,8 +756,7 @@ mod test {
|
|||||||
let mut last_id = Hash::default();
|
let mut last_id = Hash::default();
|
||||||
let mut entries = Vec::new();
|
let mut entries = Vec::new();
|
||||||
for _ in 0..5 {
|
for _ in 0..5 {
|
||||||
let entry = Entry::new(&mut last_id, 0, 1, vec![]); //just ticks
|
let entry = next_entry_mut(&mut last_id, 1, vec![]); //just ticks
|
||||||
last_id = entry.id;
|
|
||||||
entries.push(entry);
|
entries.push(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
43
src/tvu.rs
43
src/tvu.rs
@ -213,13 +213,13 @@ pub mod tests {
|
|||||||
use crate::bank::Bank;
|
use crate::bank::Bank;
|
||||||
use crate::blocktree::get_tmp_ledger_path;
|
use crate::blocktree::get_tmp_ledger_path;
|
||||||
use crate::cluster_info::{ClusterInfo, Node};
|
use crate::cluster_info::{ClusterInfo, Node};
|
||||||
use crate::entry::Entry;
|
use crate::entry::next_entry_mut;
|
||||||
|
use crate::entry::EntrySlice;
|
||||||
use crate::genesis_block::GenesisBlock;
|
use crate::genesis_block::GenesisBlock;
|
||||||
use crate::gossip_service::GossipService;
|
use crate::gossip_service::GossipService;
|
||||||
use crate::packet::SharedBlob;
|
use crate::packet::index_blobs;
|
||||||
use crate::storage_stage::STORAGE_ROTATE_TEST_COUNT;
|
use crate::storage_stage::STORAGE_ROTATE_TEST_COUNT;
|
||||||
use crate::streamer;
|
use crate::streamer;
|
||||||
use bincode::serialize;
|
|
||||||
use solana_sdk::system_transaction::SystemTransaction;
|
use solana_sdk::system_transaction::SystemTransaction;
|
||||||
use std::fs::remove_dir_all;
|
use std::fs::remove_dir_all;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
@ -372,10 +372,8 @@ pub mod tests {
|
|||||||
let transfer_amount = 501;
|
let transfer_amount = 501;
|
||||||
let bob_keypair = Keypair::new();
|
let bob_keypair = Keypair::new();
|
||||||
for i in 0..num_transfers {
|
for i in 0..num_transfers {
|
||||||
let entry0 = Entry::new(&cur_hash, 0, i, vec![]);
|
let entry0 = next_entry_mut(&mut cur_hash, i, vec![]);
|
||||||
cur_hash = entry0.id;
|
let entry_tick0 = next_entry_mut(&mut cur_hash, i + 1, vec![]);
|
||||||
let entry_tick0 = Entry::new(&cur_hash, 0, i + 1, vec![]);
|
|
||||||
cur_hash = entry_tick0.id;
|
|
||||||
|
|
||||||
let tx0 = SystemTransaction::new_account(
|
let tx0 = SystemTransaction::new_account(
|
||||||
&mint_keypair,
|
&mint_keypair,
|
||||||
@ -384,30 +382,19 @@ pub mod tests {
|
|||||||
cur_hash,
|
cur_hash,
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
let entry_tick1 = Entry::new(&cur_hash, 0, i + 1, vec![]);
|
let entry_tick1 = next_entry_mut(&mut cur_hash, i + 1, vec![]);
|
||||||
cur_hash = entry_tick1.id;
|
let entry1 = next_entry_mut(&mut cur_hash, i + num_transfers, vec![tx0]);
|
||||||
let entry1 = Entry::new(&cur_hash, 0, i + num_transfers, vec![tx0]);
|
let entry_tick2 = next_entry_mut(&mut cur_hash, i + 1, vec![]);
|
||||||
let entry_tick2 = Entry::new(&entry1.id, 0, i + 1, vec![]);
|
|
||||||
cur_hash = entry_tick2.id;
|
|
||||||
|
|
||||||
alice_ref_balance -= transfer_amount;
|
alice_ref_balance -= transfer_amount;
|
||||||
|
|
||||||
for entry in vec![entry0, entry_tick0, entry_tick1, entry1, entry_tick2] {
|
let entries = vec![entry0, entry_tick0, entry_tick1, entry1, entry_tick2];
|
||||||
let b = SharedBlob::default();
|
let blobs = entries.to_shared_blobs();
|
||||||
{
|
index_blobs(&blobs, &mut blob_idx, &vec![0; blobs.len()]);
|
||||||
let mut w = b.write().unwrap();
|
blobs
|
||||||
w.set_index(blob_idx);
|
.iter()
|
||||||
blob_idx += 1;
|
.for_each(|b| b.write().unwrap().meta.set_addr(&tvu_addr));
|
||||||
w.forward(true);
|
msgs.extend(blobs.into_iter());
|
||||||
|
|
||||||
let serialized_entry = serialize(&entry).unwrap();
|
|
||||||
|
|
||||||
w.data_mut()[..serialized_entry.len()].copy_from_slice(&serialized_entry);
|
|
||||||
w.set_size(serialized_entry.len());
|
|
||||||
w.meta.set_addr(&tvu_addr);
|
|
||||||
}
|
|
||||||
msgs.push(b);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// send the blobs into the socket
|
// send the blobs into the socket
|
||||||
|
Reference in New Issue
Block a user