diff --git a/src/cluster_info.rs b/src/cluster_info.rs index 92955975e4..610de4f76b 100644 --- a/src/cluster_info.rs +++ b/src/cluster_info.rs @@ -12,6 +12,7 @@ //! * layer 2 - Everyone else, if layer 1 is `2^10`, layer 2 should be able to fit `2^20` number of nodes. //! //! Bank needs to provide an interface for us to query the stake weight +use crate::bank_forks::BankForks; use crate::blocktree::Blocktree; use crate::contact_info::ContactInfo; use crate::crds_gossip::CrdsGossip; @@ -31,7 +32,6 @@ use rayon::prelude::*; use solana_metrics::counter::Counter; use solana_metrics::{influxdb, submit}; use solana_netutil::{bind_in_range, bind_to, find_available_port_in_range, multi_bind_in_range}; -use solana_runtime::bank::Bank; use solana_runtime::bloom::Bloom; use solana_sdk::hash::Hash; use solana_sdk::pubkey::Pubkey; @@ -860,7 +860,7 @@ impl ClusterInfo { /// randomly pick a node and ask them for updates asynchronously pub fn gossip( obj: Arc>, - bank: Option>, + bank_forks: Option>>, blob_sender: BlobSender, exit: Arc, ) -> JoinHandle<()> { @@ -870,8 +870,10 @@ impl ClusterInfo { let mut last_push = timestamp(); loop { let start = timestamp(); - let stakes: HashMap<_, _> = match bank { - Some(ref bank) => bank.staked_nodes(), + let stakes: HashMap<_, _> = match bank_forks { + Some(ref bank_forks) => { + bank_forks.read().unwrap().working_bank().staked_nodes() + } None => HashMap::new(), }; let _ = Self::run_gossip(&obj, &stakes, &blob_sender); diff --git a/src/fullnode.rs b/src/fullnode.rs index 80d28f7860..6d231d84fc 100644 --- a/src/fullnode.rs +++ b/src/fullnode.rs @@ -192,7 +192,7 @@ impl Fullnode { let gossip_service = GossipService::new( &cluster_info, Some(blocktree.clone()), - Some(bank.clone()), + Some(bank_forks.clone()), node.sockets.gossip, exit.clone(), ); diff --git a/src/gossip_service.rs b/src/gossip_service.rs index ad7ead61e5..698f73053a 100644 --- a/src/gossip_service.rs +++ b/src/gossip_service.rs @@ -1,10 +1,10 @@ //! The `gossip_service` module implements the network control plane. +use crate::bank_forks::BankForks; use crate::blocktree::Blocktree; use crate::cluster_info::{ClusterInfo, Node, NodeInfo}; use crate::service::Service; use crate::streamer; -use solana_runtime::bank::Bank; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; use std::net::UdpSocket; @@ -24,7 +24,7 @@ impl GossipService { pub fn new( cluster_info: &Arc>, blocktree: Option>, - bank: Option>, + bank_forks: Option>>, gossip_socket: UdpSocket, exit: Arc, ) -> Self { @@ -46,8 +46,12 @@ impl GossipService { response_sender.clone(), exit.clone(), ); - let t_gossip = - ClusterInfo::gossip(cluster_info.clone(), bank, response_sender, exit.clone()); + let t_gossip = ClusterInfo::gossip( + cluster_info.clone(), + bank_forks, + response_sender, + exit.clone(), + ); let thread_hdls = vec![t_receiver, t_responder, t_listen, t_gossip]; Self { exit, thread_hdls } }