From eb90d8d4632aed346c83bd7ee66c9bfa73f84daa Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Mon, 4 Mar 2019 16:21:33 -0800 Subject: [PATCH] Clean up Rpc exit signal --- core/src/fullnode.rs | 5 +---- core/src/rpc.rs | 21 +++++++++------------ core/src/rpc_service.rs | 21 +++++---------------- 3 files changed, 15 insertions(+), 32 deletions(-) diff --git a/core/src/fullnode.rs b/core/src/fullnode.rs index f67a614cd1..314b8cf197 100644 --- a/core/src/fullnode.rs +++ b/core/src/fullnode.rs @@ -168,7 +168,7 @@ impl Fullnode { drone_addr, storage_state.clone(), config.rpc_config.clone(), - exit.clone(), + &exit, ); let subscriptions = Arc::new(RpcSubscriptions::default()); @@ -293,9 +293,6 @@ impl Fullnode { // which is the sole initiator of rotations. self.poh_recorder.lock().unwrap().clear_bank(); self.poh_service.exit(); - if let Some(ref rpc_service) = self.rpc_service { - rpc_service.exit(); - } self.node_services.exit(); } diff --git a/core/src/rpc.rs b/core/src/rpc.rs index 35147db44f..bec2580dfa 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -57,13 +57,13 @@ impl JsonRpcRequestProcessor { pub fn new( storage_state: StorageState, config: JsonRpcConfig, - fullnode_exit: Arc, + fullnode_exit: &Arc, ) -> Self { JsonRpcRequestProcessor { bank: None, storage_state, config, - fullnode_exit, + fullnode_exit: fullnode_exit.clone(), } } @@ -428,7 +428,7 @@ mod tests { let request_processor = Arc::new(RwLock::new(JsonRpcRequestProcessor::new( StorageState::default(), JsonRpcConfig::default(), - exit, + &exit, ))); request_processor.write().unwrap().set_bank(&bank); let cluster_info = Arc::new(RwLock::new(ClusterInfo::new(NodeInfo::default()))); @@ -458,7 +458,7 @@ mod tests { let bank = Arc::new(Bank::new(&genesis_block)); let exit = Arc::new(AtomicBool::new(false)); let mut request_processor = - JsonRpcRequestProcessor::new(StorageState::default(), JsonRpcConfig::default(), exit); + JsonRpcRequestProcessor::new(StorageState::default(), JsonRpcConfig::default(), &exit); request_processor.set_bank(&bank); thread::spawn(move || { let blockhash = bank.last_blockhash(); @@ -631,7 +631,7 @@ mod tests { let mut request_processor = JsonRpcRequestProcessor::new( StorageState::default(), JsonRpcConfig::default(), - exit, + &exit, ); request_processor.set_bank(&bank); Arc::new(RwLock::new(request_processor)) @@ -707,11 +707,8 @@ mod tests { #[test] fn test_rpc_request_processor_config_default_trait_fullnode_exit_fails() { let exit = Arc::new(AtomicBool::new(false)); - let request_processor = JsonRpcRequestProcessor::new( - StorageState::default(), - JsonRpcConfig::default(), - exit.clone(), - ); + let request_processor = + JsonRpcRequestProcessor::new(StorageState::default(), JsonRpcConfig::default(), &exit); assert_eq!(request_processor.fullnode_exit(), Ok(false)); assert_eq!(exit.load(Ordering::Relaxed), false); } @@ -721,7 +718,7 @@ mod tests { let request_processor = JsonRpcRequestProcessor::new( StorageState::default(), JsonRpcConfig::DefaultConfig, - exit.clone(), + &exit, ); assert_eq!(request_processor.fullnode_exit(), Ok(false)); assert_eq!(exit.load(Ordering::Relaxed), false); @@ -733,7 +730,7 @@ mod tests { let request_processor = JsonRpcRequestProcessor::new( StorageState::default(), JsonRpcConfig::TestOnlyAllowRpcFullnodeExit, - exit.clone(), + &exit, ); assert_eq!(request_processor.fullnode_exit(), Ok(true)); assert_eq!(exit.load(Ordering::Relaxed), true); diff --git a/core/src/rpc_service.rs b/core/src/rpc_service.rs index 3d4e4db025..1f3d34eda4 100644 --- a/core/src/rpc_service.rs +++ b/core/src/rpc_service.rs @@ -17,7 +17,6 @@ pub const RPC_PORT: u16 = 8899; pub struct JsonRpcService { thread_hdl: JoinHandle<()>, - exit: Arc, pub request_processor: Arc>, // Used only by tests... } @@ -28,13 +27,13 @@ impl JsonRpcService { drone_addr: SocketAddr, storage_state: StorageState, config: JsonRpcConfig, - exit: Arc, + exit: &Arc, ) -> Self { info!("rpc bound to {:?}", rpc_addr); let request_processor = Arc::new(RwLock::new(JsonRpcRequestProcessor::new( storage_state, config, - exit.clone(), + exit, ))); let request_processor_ = request_processor.clone(); @@ -71,7 +70,6 @@ impl JsonRpcService { .unwrap(); Self { thread_hdl, - exit, request_processor, } } @@ -79,15 +77,6 @@ impl JsonRpcService { pub fn set_bank(&mut self, bank: &Arc) { self.request_processor.write().unwrap().set_bank(bank); } - - pub fn exit(&self) { - self.exit.store(true, Ordering::Relaxed); - } - - pub fn close(self) -> thread::Result<()> { - self.exit(); - self.join() - } } impl Service for JsonRpcService { @@ -127,7 +116,7 @@ mod tests { drone_addr, StorageState::default(), JsonRpcConfig::default(), - exit, + &exit, ); rpc_service.set_bank(&Arc::new(bank)); let thread = rpc_service.thread_hdl.thread(); @@ -142,7 +131,7 @@ mod tests { .get_balance(alice.pubkey()) .unwrap() ); - - rpc_service.close().unwrap(); + exit.store(true, Ordering::Relaxed); + rpc_service.join().unwrap(); } }