| 
23 | 23 | use crate::{config::Config, error::Error, initialized_service::TrackInitialization};  | 
24 | 24 | use async_trait::async_trait;  | 
25 | 25 | use codec::{Decode, Encode};  | 
 | 26 | +use futures::future::join_all;  | 
26 | 27 | use itc_rpc_client::direct_client::{DirectApi, DirectClient as DirectWorkerApi};  | 
27 | 28 | use itp_enclave_api::enclave_base::EnclaveBase;  | 
28 | 29 | use itp_node_api::{api_client::PalletTeebagApi, node_api_factory::CreateNodeApi};  | 
@@ -119,19 +120,22 @@ where  | 
119 | 120 | 
 
  | 
120 | 121 | 		let nr_peers = peers.len();  | 
121 | 122 | 
 
  | 
122 |  | -		for url in peers {  | 
 | 123 | +		let futures = peers.iter().map(|url| {  | 
123 | 124 | 			let encoded_blocks_cloned = encoded_blocks.clone();  | 
124 |  | -			tokio::spawn(async move {  | 
125 |  | -				let client = DirectWorkerApi::new(url.trusted.to_string());  | 
126 |  | - | 
 | 125 | +			let url = url.trusted.clone();  | 
 | 126 | +			tokio::task::spawn_blocking(move || {  | 
 | 127 | +				let client = DirectWorkerApi::new(url.to_string());  | 
127 | 128 | 				if let Err(e) = client.import_sidechain_blocks(encoded_blocks_cloned) {  | 
128 | 129 | 					error!(  | 
129 | 130 | 						"Broadcast block request ({}) to {} failed: {:?}",  | 
130 |  | -						RPC_METHOD_NAME_IMPORT_BLOCKS, url.trusted, e  | 
 | 131 | +						RPC_METHOD_NAME_IMPORT_BLOCKS, url, e  | 
131 | 132 | 					);  | 
132 | 133 | 				}  | 
133 |  | -			});  | 
134 |  | -		}  | 
 | 134 | +			})  | 
 | 135 | +		});  | 
 | 136 | + | 
 | 137 | +		join_all(futures).await;  | 
 | 138 | + | 
135 | 139 | 		info!("broadcast {} block(s) to {} peers", nr_blocks, nr_peers);  | 
136 | 140 | 		Ok(())  | 
137 | 141 | 	}  | 
 | 
0 commit comments