Boil away unneeded Fullnode::new_* functions

This commit is contained in:
Michael Vines
2019-01-29 18:12:32 -08:00
parent b52228feb9
commit 16e705dc75
2 changed files with 46 additions and 125 deletions

View File

@ -101,7 +101,7 @@ pub struct Fullnode {
impl Fullnode { impl Fullnode {
pub fn new( pub fn new(
node: Node, mut node: Node,
keypair: Arc<Keypair>, keypair: Arc<Keypair>,
ledger_path: &str, ledger_path: &str,
leader_scheduler: Arc<RwLock<LeaderScheduler>>, leader_scheduler: Arc<RwLock<LeaderScheduler>>,
@ -112,57 +112,7 @@ impl Fullnode {
let (genesis_block, db_ledger) = Self::make_db_ledger(ledger_path); let (genesis_block, db_ledger) = Self::make_db_ledger(ledger_path);
let (bank, entry_height, last_entry_id) = let (bank, entry_height, last_entry_id) =
Self::new_bank_from_db_ledger(&genesis_block, &db_ledger, leader_scheduler); Self::new_bank_from_db_ledger(&genesis_block, &db_ledger, leader_scheduler);
Self::new_with_bank_and_db_ledger(
node,
keypair,
bank,
&db_ledger,
entry_height,
&last_entry_id,
vote_signer,
entrypoint_info_option,
config,
)
}
#[allow(clippy::too_many_arguments)]
pub fn new_with_bank(
node: Node,
keypair: Arc<Keypair>,
ledger_path: &str,
bank: Bank,
entry_height: u64,
last_entry_id: &Hash,
vote_signer: Option<Arc<VoteSignerProxy>>,
entrypoint_info_option: Option<&NodeInfo>,
config: FullnodeConfig,
) -> Self {
let (_genesis_block, db_ledger) = Self::make_db_ledger(ledger_path);
Self::new_with_bank_and_db_ledger(
node,
keypair,
bank,
&db_ledger,
entry_height,
&last_entry_id,
vote_signer,
entrypoint_info_option,
config,
)
}
#[allow(clippy::too_many_arguments)]
fn new_with_bank_and_db_ledger(
mut node: Node,
keypair: Arc<Keypair>,
bank: Bank,
db_ledger: &Arc<DbLedger>,
entry_height: u64,
last_entry_id: &Hash,
vote_signer: Option<Arc<VoteSignerProxy>>,
entrypoint_info_option: Option<&NodeInfo>,
config: FullnodeConfig,
) -> Self {
info!("node info: {:?}", node.info); info!("node info: {:?}", node.info);
info!("node entrypoint_info: {:?}", entrypoint_info_option); info!("node entrypoint_info: {:?}", entrypoint_info_option);
info!( info!(
@ -263,7 +213,7 @@ impl Fullnode {
vote_signer, vote_signer,
&bank, &bank,
entry_height, entry_height,
*last_entry_id, last_entry_id,
&cluster_info, &cluster_info,
sockets, sockets,
db_ledger.clone(), db_ledger.clone(),
@ -293,7 +243,7 @@ impl Fullnode {
entry_height, entry_height,
config.sigverify_disabled, config.sigverify_disabled,
max_tick_height, max_tick_height,
last_entry_id, &last_entry_id,
keypair.pubkey(), keypair.pubkey(),
scheduled_leader == keypair.pubkey(), scheduled_leader == keypair.pubkey(),
&to_validator_sender, &to_validator_sender,
@ -487,7 +437,6 @@ impl Service for Fullnode {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use crate::bank::Bank;
use crate::cluster_info::Node; use crate::cluster_info::Node;
use crate::db_ledger::*; use crate::db_ledger::*;
use crate::entry::make_consecutive_blobs; use crate::entry::make_consecutive_blobs;
@ -509,83 +458,63 @@ mod tests {
#[test] #[test]
fn validator_exit() { fn validator_exit() {
let keypair = Keypair::new(); let leader_keypair = Keypair::new();
let tn = Node::new_localhost_with_pubkey(keypair.pubkey()); let leader_node = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
let (genesis_block, _mint_keypair, validator_ledger_path) =
create_tmp_genesis("validator_exit", 10_000, keypair.pubkey(), 1000);
let mut bank = Bank::new(&genesis_block);
let entry = tn.info.clone();
let entry_height = 0;
let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::from_bootstrap_leader( let validator_keypair = Keypair::new();
entry.id, let validator_node = Node::new_localhost_with_pubkey(validator_keypair.pubkey());
))); let (_, _, validator_ledger_path) =
bank.leader_scheduler = leader_scheduler; create_tmp_genesis("validator_exit", 10_000, leader_keypair.pubkey(), 1000);
let last_id = bank.last_id(); let validator = Fullnode::new(
let keypair = Arc::new(keypair); validator_node,
let signer = VoteSignerProxy::new_local(&keypair); Arc::new(validator_keypair),
let v = Fullnode::new_with_bank(
tn,
keypair,
&validator_ledger_path, &validator_ledger_path,
bank, Arc::new(RwLock::new(LeaderScheduler::new(&Default::default()))),
entry_height, None,
&last_id, Some(&leader_node.info),
Some(Arc::new(signer)),
Some(&entry),
Default::default(), Default::default(),
); );
v.close().unwrap(); validator.close().unwrap();
remove_dir_all(validator_ledger_path).unwrap(); remove_dir_all(validator_ledger_path).unwrap();
} }
#[test] #[test]
fn validator_parallel_exit() { fn validator_parallel_exit() {
let leader_keypair = Keypair::new();
let leader_node = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
let mut ledger_paths = vec![]; let mut ledger_paths = vec![];
let vals: Vec<Fullnode> = (0..2) let validators: Vec<Fullnode> = (0..2)
.map(|i| { .map(|i| {
let keypair = Keypair::new(); let validator_keypair = Keypair::new();
let tn = Node::new_localhost_with_pubkey(keypair.pubkey()); let validator_node = Node::new_localhost_with_pubkey(validator_keypair.pubkey());
let (genesis_block, _mint_keypair, validator_ledger_path) = create_tmp_genesis( let (_, _, validator_ledger_path) = create_tmp_genesis(
&format!("validator_parallel_exit_{}", i), &format!("validator_parallel_exit_{}", i),
10_000, 10_000,
keypair.pubkey(), leader_keypair.pubkey(),
1000, 1000,
); );
ledger_paths.push(validator_ledger_path.clone()); ledger_paths.push(validator_ledger_path.clone());
let mut bank = Bank::new(&genesis_block);
let entry = tn.info.clone();
let leader_scheduler = Arc::new(RwLock::new( Fullnode::new(
LeaderScheduler::from_bootstrap_leader(entry.id), validator_node,
)); Arc::new(validator_keypair),
bank.leader_scheduler = leader_scheduler;
let entry_height = 0;
let last_id = bank.last_id();
let keypair = Arc::new(keypair);
let signer = VoteSignerProxy::new_local(&keypair);
Fullnode::new_with_bank(
tn,
keypair,
&validator_ledger_path, &validator_ledger_path,
bank, Arc::new(RwLock::new(LeaderScheduler::new(&Default::default()))),
entry_height, None,
&last_id, Some(&leader_node.info),
Some(Arc::new(signer)),
Some(&entry),
Default::default(), Default::default(),
) )
}) })
.collect(); .collect();
//each validator can exit in parallel to speed many sequential calls to `join` // Each validator can exit in parallel to speed many sequential calls to `join`
vals.iter().for_each(|v| v.exit()); validators.iter().for_each(|v| v.exit());
//while join is called sequentially, the above exit call notified all the // While join is called sequentially, the above exit call notified all the
//validators to exit from all their threads // validators to exit from all their threads
vals.into_iter().for_each(|v| { validators.into_iter().for_each(|validator| {
v.join().unwrap(); validator.join().unwrap();
}); });
for path in ledger_paths { for path in ledger_paths {

View File

@ -444,35 +444,27 @@ pub fn new_fullnode(ledger_name: &'static str) -> (Fullnode, NodeInfo, Keypair,
use crate::vote_signer_proxy::VoteSignerProxy; use crate::vote_signer_proxy::VoteSignerProxy;
use solana_sdk::signature::KeypairUtil; use solana_sdk::signature::KeypairUtil;
let leader_keypair = Arc::new(Keypair::new()); let node_keypair = Arc::new(Keypair::new());
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey()); let node = Node::new_localhost_with_pubkey(node_keypair.pubkey());
let leader_data = leader.info.clone(); let node_info = node.info.clone();
let (genesis_block, alice) = GenesisBlock::new(10_000); let (genesis_block, mint_keypair) = GenesisBlock::new_with_leader(10_000, node_info.id, 42);
let mut bank = Bank::new(&genesis_block);
let ledger_path = create_tmp_ledger(ledger_name, &genesis_block); let ledger_path = create_tmp_ledger(ledger_name, &genesis_block);
let entry_height = 0;
let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::from_bootstrap_leader( let leader_scheduler = LeaderScheduler::from_bootstrap_leader(node_info.id);
leader_data.id,
)));
bank.leader_scheduler = leader_scheduler;
let vote_account_keypair = Arc::new(Keypair::new()); let vote_account_keypair = Arc::new(Keypair::new());
let vote_signer = VoteSignerProxy::new_local(&vote_account_keypair); let vote_signer = VoteSignerProxy::new_local(&vote_account_keypair);
let last_id = bank.last_id(); let node = Fullnode::new(
let server = Fullnode::new_with_bank( node,
leader, node_keypair,
leader_keypair,
&ledger_path, &ledger_path,
bank, Arc::new(RwLock::new(leader_scheduler)),
entry_height,
&last_id,
Some(Arc::new(vote_signer)), Some(Arc::new(vote_signer)),
None, None,
Default::default(), Default::default(),
); );
(server, leader_data, alice, ledger_path) (node, node_info, mint_keypair, ledger_path)
} }
#[cfg(test)] #[cfg(test)]