diff --git a/api/src/handlers.rs b/api/src/handlers.rs index eae64e1c..69272d79 100644 --- a/api/src/handlers.rs +++ b/api/src/handlers.rs @@ -231,24 +231,24 @@ impl Handler for SumTreeHandler { } pub struct PeersAllHandler { - pub p2p_server: Arc, + pub peers: p2p::Peers, } impl Handler for PeersAllHandler { fn handle(&self, _req: &mut Request) -> IronResult { - let peers = &self.p2p_server.all_peers(); + let peers = &self.peers.all_peers(); json_response_pretty(&peers) } } pub struct PeersConnectedHandler { - pub p2p_server: Arc, + pub peers: p2p::Peers, } impl Handler for PeersConnectedHandler { fn handle(&self, _req: &mut Request) -> IronResult { let mut peers = vec![]; - for p in &self.p2p_server.connected_peers() { + for p in &self.peers.connected_peers() { let p = p.read().unwrap(); let peer_info = p.info.clone(); peers.push(peer_info); @@ -262,7 +262,7 @@ impl Handler for PeersConnectedHandler { /// POST /v1/peers/10.12.12.13/ban /// TODO POST /v1/peers/10.12.12.13/unban pub struct PeerHandler { - pub p2p_server: Arc, + pub peers: p2p::Peers, } impl Handler for PeerHandler { @@ -276,7 +276,7 @@ impl Handler for PeerHandler { "ban" => { path_elems.pop(); if let Ok(addr) = path_elems.last().unwrap().parse() { - self.p2p_server.ban_peer(&addr); + self.peers.ban_peer(&addr); Ok(Response::with((status::Ok, ""))) } else { Ok(Response::with((status::BadRequest, ""))) @@ -459,74 +459,76 @@ pub fn start_rest_apis( addr: String, chain: Arc, tx_pool: Arc>>, - p2p_server: Arc, + peers: p2p::Peers, ) where T: pool::BlockChain + Send + Sync + 'static, { - thread::spawn(move || { - // build handlers and register them under the appropriate endpoint - let utxo_handler = UtxoHandler { - chain: chain.clone(), - }; - let block_handler = BlockHandler { - chain: chain.clone(), - }; - let chain_tip_handler = ChainHandler { - chain: chain.clone(), - }; - let sumtree_handler = SumTreeHandler { - chain: chain.clone(), - }; - let pool_info_handler = PoolInfoHandler { - tx_pool: tx_pool.clone(), - }; - let pool_push_handler = PoolPushHandler { - tx_pool: tx_pool.clone(), - }; - let peers_all_handler = PeersAllHandler { - p2p_server: p2p_server.clone(), - }; - let peers_connected_handler = PeersConnectedHandler { - p2p_server: p2p_server.clone(), - }; - let peer_handler = PeerHandler { - p2p_server: p2p_server.clone(), - }; +let _ = thread::Builder::new() + .name("apis".to_string()) + .spawn(move || { + // build handlers and register them under the appropriate endpoint + let utxo_handler = UtxoHandler { + chain: chain.clone(), + }; + let block_handler = BlockHandler { + chain: chain.clone(), + }; + let chain_tip_handler = ChainHandler { + chain: chain.clone(), + }; + let sumtree_handler = SumTreeHandler { + chain: chain.clone(), + }; + let pool_info_handler = PoolInfoHandler { + tx_pool: tx_pool.clone(), + }; + let pool_push_handler = PoolPushHandler { + tx_pool: tx_pool.clone(), + }; + let peers_all_handler = PeersAllHandler { + p2p_server: p2p_server.clone(), + }; + let peers_connected_handler = PeersConnectedHandler { + p2p_server: p2p_server.clone(), + }; + let peer_handler = PeerHandler { + p2p_server: p2p_server.clone(), + }; - let route_list = vec!( - "get /".to_string(), - "get /blocks".to_string(), - "get /chain".to_string(), - "get /chain/utxos".to_string(), - "get /sumtrees/roots".to_string(), - "get /sumtrees/lastutxos?n=10".to_string(), - "get /sumtrees/lastrangeproofs".to_string(), - "get /sumtrees/lastkernels".to_string(), - "get /pool".to_string(), - "post /pool/push".to_string(), - "get /peers/all".to_string(), - "get /peers/connected".to_string(), - ); - let index_handler = IndexHandler { list: route_list }; - let router = router!( - index: get "/" => index_handler, - blocks: get "/blocks/*" => block_handler, - chain_tip: get "/chain" => chain_tip_handler, - chain_utxos: get "/chain/utxos/*" => utxo_handler, - sumtree_roots: get "/sumtrees/*" => sumtree_handler, - pool_info: get "/pool" => pool_info_handler, - pool_push: post "/pool/push" => pool_push_handler, - peers_all: get "/peers/all" => peers_all_handler, - peers_connected: get "/peers/connected" => peers_connected_handler, - peer: post "/peers/*" => peer_handler, - ); + let route_list = vec!( + "get /".to_string(), + "get /blocks".to_string(), + "get /chain".to_string(), + "get /chain/utxos".to_string(), + "get /sumtrees/roots".to_string(), + "get /sumtrees/lastutxos?n=10".to_string(), + "get /sumtrees/lastrangeproofs".to_string(), + "get /sumtrees/lastkernels".to_string(), + "get /pool".to_string(), + "post /pool/push".to_string(), + "get /peers/all".to_string(), + "get /peers/connected".to_string(), + ); + let index_handler = IndexHandler { list: route_list }; + let router = router!( + index: get "/" => index_handler, + blocks: get "/blocks/*" => block_handler, + chain_tip: get "/chain" => chain_tip_handler, + chain_utxos: get "/chain/utxos/*" => utxo_handler, + sumtree_roots: get "/sumtrees/*" => sumtree_handler, + pool_info: get "/pool" => pool_info_handler, + pool_push: post "/pool/push" => pool_push_handler, + peers_all: get "/peers/all" => peers_all_handler, + peers_connected: get "/peers/connected" => peers_connected_handler, + peer: post "/peers/*" => peer_handler, + ); - let mut apis = ApiServer::new("/v1".to_string()); - apis.register_handler(router); + let mut apis = ApiServer::new("/v1".to_string()); + apis.register_handler(router); - info!(LOGGER, "Starting HTTP API server at {}.", addr); - apis.start(&addr[..]).unwrap_or_else(|e| { - error!(LOGGER, "Failed to start API HTTP server: {}.", e); - }); + info!(LOGGER, "Starting HTTP API server at {}.", addr); + apis.start(&addr[..]).unwrap_or_else(|e| { + error!(LOGGER, "Failed to start API HTTP server: {}.", e); + }); }); } diff --git a/grin/src/seed.rs b/grin/src/seed.rs index ae356e68..6a0196da 100644 --- a/grin/src/seed.rs +++ b/grin/src/seed.rs @@ -169,7 +169,8 @@ impl Seeder { // a thread pool is required so we don't block the event loop with a // db query - let thread_pool = cpupool::CpuPool::new(1); + let thread_pool = cpupool::Builder::new() + .pool_size(1).name_prefix("seed").create(); let p2p_server = self.p2p.clone(); let seeder = thread_pool .spawn_fn(move || { diff --git a/grin/src/server.rs b/grin/src/server.rs index 61e9660a..8862fa7f 100644 --- a/grin/src/server.rs +++ b/grin/src/server.rs @@ -205,15 +205,17 @@ impl Server { let mut miner = miner::Miner::new(config.clone(), self.chain.clone(), self.tx_pool.clone()); miner.set_debug_output_id(format!("Port {}", self.config.p2p_config.unwrap().port)); - thread::spawn(move || { - // TODO push this down in the run loop so miner gets paused anytime we - // decide to sync again - let secs_5 = time::Duration::from_secs(5); - while net_adapter.is_syncing() { - thread::sleep(secs_5); - } - miner.run_loop(config.clone(), cuckoo_size as u32, proof_size); - }); + let _ = thread::Builder::new() + .name("miner".to_string()) + .spawn(move || { + // TODO push this down in the run loop so miner gets paused anytime we + // decide to sync again + let secs_5 = time::Duration::from_secs(5); + while net_adapter.is_syncing() { + thread::sleep(secs_5); + } + miner.run_loop(config.clone(), cuckoo_size as u32, proof_size); + }); } /// The chain head