From 0dde79f42bbf056f287f283128eb60ff47acdfdf Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Wed, 20 Feb 2019 17:05:57 -0800 Subject: [PATCH] Push BankForks into Fullnode::new() --- src/fullnode.rs | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/fullnode.rs b/src/fullnode.rs index 02450e18d2..844eee46f6 100644 --- a/src/fullnode.rs +++ b/src/fullnode.rs @@ -1,7 +1,8 @@ //! The `fullnode` module hosts all the fullnode microservices. +use crate::bank_forks::BankForks; use crate::blocktree::{Blocktree, BlocktreeConfig}; -use crate::blocktree_processor; +use crate::blocktree_processor::{self, BankForksInfo}; use crate::cluster_info::{ClusterInfo, Node, NodeInfo}; use crate::gossip_service::GossipService; use crate::leader_scheduler::{LeaderScheduler, LeaderSchedulerConfig}; @@ -126,8 +127,18 @@ impl Fullnode { let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::new( &config.leader_scheduler_config, ))); - let (bank, entry_height, last_entry_id, blocktree, ledger_signal_receiver) = - new_bank_from_ledger(ledger_path, &config.ledger_config(), &leader_scheduler); + let (mut bank_forks, bank_forks_info, blocktree, ledger_signal_receiver) = + new_banks_from_blocktree(ledger_path, &config.ledger_config(), &leader_scheduler); + + if bank_forks_info.len() != 1 { + warn!("TODO: figure out what to do with multiple bank forks"); + } + bank_forks.set_working_bank_id(bank_forks_info[0].bank_id); + let (bank, entry_height, last_entry_id) = ( + bank_forks.working_bank(), + bank_forks_info[0].entry_height, + bank_forks_info[0].last_entry_id, + ); info!("node info: {:?}", node.info); info!("node entrypoint_info: {:?}", entrypoint_info_option); @@ -453,38 +464,44 @@ fn new_banks_from_blocktree( blocktree_path: &str, blocktree_config: &BlocktreeConfig, leader_scheduler: &Arc>, -) -> (Arc, u64, Hash, Blocktree, Receiver) { +) -> (BankForks, Vec, Blocktree, Receiver) { let (blocktree, ledger_signal_receiver) = Blocktree::open_with_config_signal(blocktree_path, blocktree_config) .expect("Expected to successfully open database ledger"); let genesis_block = GenesisBlock::load(blocktree_path).expect("Expected to successfully open genesis block"); - let (mut bank_forks, bank_forks_info) = + let (bank_forks, bank_forks_info) = blocktree_processor::process_blocktree(&genesis_block, &blocktree, leader_scheduler) .expect("process_blocktree failed"); - if bank_forks_info.len() != 1 { - warn!("TODO: figure out what to do with multiple bank forks"); - } - bank_forks.set_working_bank_id(bank_forks_info[0].bank_id); ( - bank_forks.working_bank(), - bank_forks_info[0].entry_height, - bank_forks_info[0].last_entry_id, + bank_forks, + bank_forks_info, blocktree, ledger_signal_receiver, ) } +// TODO: Remove this function from tests #[allow(clippy::trivially_copy_pass_by_ref)] pub fn new_bank_from_ledger( ledger_path: &str, ledger_config: &BlocktreeConfig, leader_scheduler: &Arc>, ) -> (Arc, u64, Hash, Blocktree, Receiver) { - let (working_bank, entry_height, last_entry_id, blocktree, ledger_signal_receiver) = + let (mut bank_forks, bank_forks_info, blocktree, ledger_signal_receiver) = new_banks_from_blocktree(ledger_path, ledger_config, leader_scheduler); + + // This helper won't handle multiple banks + assert_eq!(bank_forks_info.len(), 1); + bank_forks.set_working_bank_id(bank_forks_info[0].bank_id); + let (working_bank, entry_height, last_entry_id) = ( + bank_forks.working_bank(), + bank_forks_info[0].entry_height, + bank_forks_info[0].last_entry_id, + ); + ( working_bank, entry_height,