Boil away unneeded Fullnode::new_* functions
This commit is contained in:
143
src/fullnode.rs
143
src/fullnode.rs
@ -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 {
|
||||||
|
@ -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)]
|
||||||
|
Reference in New Issue
Block a user