|
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