Push BankForks into Fullnode::new()
This commit is contained in:
		@@ -1,7 +1,8 @@
 | 
				
			|||||||
//! The `fullnode` module hosts all the fullnode microservices.
 | 
					//! The `fullnode` module hosts all the fullnode microservices.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::bank_forks::BankForks;
 | 
				
			||||||
use crate::blocktree::{Blocktree, BlocktreeConfig};
 | 
					use crate::blocktree::{Blocktree, BlocktreeConfig};
 | 
				
			||||||
use crate::blocktree_processor;
 | 
					use crate::blocktree_processor::{self, BankForksInfo};
 | 
				
			||||||
use crate::cluster_info::{ClusterInfo, Node, NodeInfo};
 | 
					use crate::cluster_info::{ClusterInfo, Node, NodeInfo};
 | 
				
			||||||
use crate::gossip_service::GossipService;
 | 
					use crate::gossip_service::GossipService;
 | 
				
			||||||
use crate::leader_scheduler::{LeaderScheduler, LeaderSchedulerConfig};
 | 
					use crate::leader_scheduler::{LeaderScheduler, LeaderSchedulerConfig};
 | 
				
			||||||
@@ -126,8 +127,18 @@ impl Fullnode {
 | 
				
			|||||||
        let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::new(
 | 
					        let leader_scheduler = Arc::new(RwLock::new(LeaderScheduler::new(
 | 
				
			||||||
            &config.leader_scheduler_config,
 | 
					            &config.leader_scheduler_config,
 | 
				
			||||||
        )));
 | 
					        )));
 | 
				
			||||||
        let (bank, entry_height, last_entry_id, blocktree, ledger_signal_receiver) =
 | 
					        let (mut bank_forks, bank_forks_info, blocktree, ledger_signal_receiver) =
 | 
				
			||||||
            new_bank_from_ledger(ledger_path, &config.ledger_config(), &leader_scheduler);
 | 
					            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 info: {:?}", node.info);
 | 
				
			||||||
        info!("node entrypoint_info: {:?}", entrypoint_info_option);
 | 
					        info!("node entrypoint_info: {:?}", entrypoint_info_option);
 | 
				
			||||||
@@ -453,38 +464,44 @@ fn new_banks_from_blocktree(
 | 
				
			|||||||
    blocktree_path: &str,
 | 
					    blocktree_path: &str,
 | 
				
			||||||
    blocktree_config: &BlocktreeConfig,
 | 
					    blocktree_config: &BlocktreeConfig,
 | 
				
			||||||
    leader_scheduler: &Arc<RwLock<LeaderScheduler>>,
 | 
					    leader_scheduler: &Arc<RwLock<LeaderScheduler>>,
 | 
				
			||||||
) -> (Arc<Bank>, u64, Hash, Blocktree, Receiver<bool>) {
 | 
					) -> (BankForks, Vec<BankForksInfo>, Blocktree, Receiver<bool>) {
 | 
				
			||||||
    let (blocktree, ledger_signal_receiver) =
 | 
					    let (blocktree, ledger_signal_receiver) =
 | 
				
			||||||
        Blocktree::open_with_config_signal(blocktree_path, blocktree_config)
 | 
					        Blocktree::open_with_config_signal(blocktree_path, blocktree_config)
 | 
				
			||||||
            .expect("Expected to successfully open database ledger");
 | 
					            .expect("Expected to successfully open database ledger");
 | 
				
			||||||
    let genesis_block =
 | 
					    let genesis_block =
 | 
				
			||||||
        GenesisBlock::load(blocktree_path).expect("Expected to successfully open 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)
 | 
					        blocktree_processor::process_blocktree(&genesis_block, &blocktree, leader_scheduler)
 | 
				
			||||||
            .expect("process_blocktree failed");
 | 
					            .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,
 | 
				
			||||||
        bank_forks_info[0].entry_height,
 | 
					        bank_forks_info,
 | 
				
			||||||
        bank_forks_info[0].last_entry_id,
 | 
					 | 
				
			||||||
        blocktree,
 | 
					        blocktree,
 | 
				
			||||||
        ledger_signal_receiver,
 | 
					        ledger_signal_receiver,
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO: Remove this function from tests
 | 
				
			||||||
#[allow(clippy::trivially_copy_pass_by_ref)]
 | 
					#[allow(clippy::trivially_copy_pass_by_ref)]
 | 
				
			||||||
pub fn new_bank_from_ledger(
 | 
					pub fn new_bank_from_ledger(
 | 
				
			||||||
    ledger_path: &str,
 | 
					    ledger_path: &str,
 | 
				
			||||||
    ledger_config: &BlocktreeConfig,
 | 
					    ledger_config: &BlocktreeConfig,
 | 
				
			||||||
    leader_scheduler: &Arc<RwLock<LeaderScheduler>>,
 | 
					    leader_scheduler: &Arc<RwLock<LeaderScheduler>>,
 | 
				
			||||||
) -> (Arc<Bank>, u64, Hash, Blocktree, Receiver<bool>) {
 | 
					) -> (Arc<Bank>, u64, Hash, Blocktree, Receiver<bool>) {
 | 
				
			||||||
    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);
 | 
					        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,
 | 
					        working_bank,
 | 
				
			||||||
        entry_height,
 | 
					        entry_height,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user