diff --git a/sequencer/src/restart_tests.rs b/sequencer/src/restart_tests.rs index 2aaf07234..794d7b416 100644 --- a/sequencer/src/restart_tests.rs +++ b/sequencer/src/restart_tests.rs @@ -686,12 +686,12 @@ impl TestNetwork { let regular_nodes = regular_nodes.into_iter().collect::>(); tracing::info!(?da_nodes, ?regular_nodes, "shutting down nodes"); - for i in &da_nodes { - self.da_nodes[*i].stop().await; - } - for i in ®ular_nodes { - self.regular_nodes[*i].stop().await; - } + join_all( + select(&mut self.da_nodes, &da_nodes) + .map(TestNode::stop) + .chain(select(&mut self.regular_nodes, ®ular_nodes).map(TestNode::stop)), + ) + .await; // We use 3n/4 + 1 as the quorum threshold (fault tolerance f = n/4), even though the // theoretical fault tolerance of HotStuff consensus is n/3, because our implementation does @@ -764,12 +764,12 @@ impl TestNetwork { sleep(Duration::from_secs(2)).await; } - for i in da_nodes { - self.da_nodes[i].start().await; - } - for i in regular_nodes { - self.regular_nodes[i].start().await; - } + join_all( + select(&mut self.da_nodes, &da_nodes) + .map(TestNode::start) + .chain(select(&mut self.regular_nodes, ®ular_nodes).map(TestNode::start)), + ) + .await; } async fn shut_down(mut self) { @@ -921,3 +921,10 @@ fn builder_key_pair() -> EthKeyPair { fn builder_account() -> FeeAccount { builder_key_pair().fee_account() } + +fn select<'a, T>(nodes: &'a mut [T], is: &'a [usize]) -> impl Iterator { + nodes + .iter_mut() + .enumerate() + .filter_map(|(i, elem)| if is.contains(&i) { Some(elem) } else { None }) +}