diff --git a/src/banking_stage.rs b/src/banking_stage.rs index 6734a2aae..8f4d72a37 100644 --- a/src/banking_stage.rs +++ b/src/banking_stage.rs @@ -71,7 +71,7 @@ impl BankingStage { // Single thread to compute confirmation let leader_confirmation_service = - LeaderConfirmationService::new(bank.clone(), leader_id, exit.clone()); + LeaderConfirmationService::new(&bank, leader_id, exit.clone()); // Many banks that process transactions in parallel. let bank_thread_hdls: Vec> = (0..Self::num_threads()) diff --git a/src/broadcast_service.rs b/src/broadcast_service.rs index 6ddda0aec..1f7719651 100644 --- a/src/broadcast_service.rs +++ b/src/broadcast_service.rs @@ -234,7 +234,7 @@ impl BroadcastService { #[allow(clippy::too_many_arguments)] pub fn new( slot_height: u64, - bank: Arc, + bank: &Arc, sock: UdpSocket, cluster_info: Arc>, blob_index: u64, @@ -244,6 +244,7 @@ impl BroadcastService { ) -> Self { let exit_signal = Arc::new(AtomicBool::new(false)); let blocktree = blocktree.clone(); + let bank = bank.clone(); let thread_hdl = Builder::new() .name("solana-broadcaster".to_string()) .spawn(move || { @@ -322,7 +323,7 @@ mod test { // Start up the broadcast stage let broadcast_service = BroadcastService::new( slot_height, - bank.clone(), + &bank, leader_info.sockets.broadcast, cluster_info, blob_index, diff --git a/src/fullnode.rs b/src/fullnode.rs index 88e54e010..7cffec2f5 100644 --- a/src/fullnode.rs +++ b/src/fullnode.rs @@ -283,7 +283,7 @@ impl Fullnode { // TODO: This is not the correct bank. Instead TVU should pass along the // frozen Bank for each completed block for RPC to use from it's notion of the "best" // available fork (until we want to surface multiple forks to RPC) - rpc_service.set_bank(self.bank_forks.read().unwrap().working_bank()); + rpc_service.set_bank(&self.bank_forks.read().unwrap().working_bank()); } if rotation_info.leader_id == self.id { @@ -307,7 +307,7 @@ impl Fullnode { } }; self.node_services.tpu.switch_to_leader( - self.bank_forks.read().unwrap().working_bank(), + &self.bank_forks.read().unwrap().working_bank(), &self.poh_recorder, self.tpu_sockets .iter() diff --git a/src/leader_confirmation_service.rs b/src/leader_confirmation_service.rs index 52144b523..743c1831e 100644 --- a/src/leader_confirmation_service.rs +++ b/src/leader_confirmation_service.rs @@ -105,7 +105,8 @@ impl LeaderConfirmationService { } /// Create a new LeaderConfirmationService for computing confirmation. - pub fn new(bank: Arc, leader_id: Pubkey, exit: Arc) -> Self { + pub fn new(bank: &Arc, leader_id: Pubkey, exit: Arc) -> Self { + let bank = bank.clone(); let thread_hdl = Builder::new() .name("solana-leader-confirmation-service".to_string()) .spawn(move || { diff --git a/src/rpc.rs b/src/rpc.rs index a6767791d..7661a3e53 100644 --- a/src/rpc.rs +++ b/src/rpc.rs @@ -35,8 +35,8 @@ impl JsonRpcRequestProcessor { }) } - pub fn set_bank(&mut self, bank: Arc) { - self.bank = Some(bank); + pub fn set_bank(&mut self, bank: &Arc) { + self.bank = Some(bank.clone()); } pub fn new(storage_state: StorageState) -> Self { @@ -377,7 +377,7 @@ mod tests { let request_processor = Arc::new(RwLock::new(JsonRpcRequestProcessor::new( StorageState::default(), ))); - request_processor.write().unwrap().set_bank(bank); + request_processor.write().unwrap().set_bank(&bank); let cluster_info = Arc::new(RwLock::new(ClusterInfo::new(NodeInfo::default()))); let leader = NodeInfo::new_with_socketaddr(&socketaddr!("127.0.0.1:1234")); @@ -404,7 +404,7 @@ mod tests { let bob_pubkey = Keypair::new().pubkey(); let bank = Arc::new(Bank::new(&genesis_block)); let mut request_processor = JsonRpcRequestProcessor::new(StorageState::default()); - request_processor.set_bank(bank.clone()); + request_processor.set_bank(&bank); thread::spawn(move || { let last_id = bank.last_id(); let tx = SystemTransaction::new_move(&alice, bob_pubkey, 20, last_id, 0); @@ -573,7 +573,7 @@ mod tests { let meta = Meta { request_processor: { let mut request_processor = JsonRpcRequestProcessor::new(StorageState::default()); - request_processor.set_bank(bank); + request_processor.set_bank(&bank); Arc::new(RwLock::new(request_processor)) }, cluster_info: Arc::new(RwLock::new(ClusterInfo::new(NodeInfo::default()))), diff --git a/src/rpc_service.rs b/src/rpc_service.rs index 0d522331b..b98424c11 100644 --- a/src/rpc_service.rs +++ b/src/rpc_service.rs @@ -71,7 +71,7 @@ impl JsonRpcService { } } - pub fn set_bank(&mut self, bank: Arc) { + pub fn set_bank(&mut self, bank: &Arc) { self.request_processor.write().unwrap().set_bank(bank); } @@ -117,7 +117,7 @@ mod tests { ); let mut rpc_service = JsonRpcService::new(&cluster_info, rpc_addr, drone_addr, StorageState::default()); - rpc_service.set_bank(Arc::new(bank)); + rpc_service.set_bank(&Arc::new(bank)); let thread = rpc_service.thread_hdl.thread(); assert_eq!(thread.name().unwrap(), "solana-jsonrpc"); diff --git a/src/tpu.rs b/src/tpu.rs index 95d797b47..02b372902 100644 --- a/src/tpu.rs +++ b/src/tpu.rs @@ -189,7 +189,7 @@ impl Tpu { #[allow(clippy::too_many_arguments)] pub fn switch_to_leader( &mut self, - bank: Arc, + bank: &Arc, poh_recorder: &Arc>, transactions_sockets: Vec, broadcast_socket: UdpSocket,