From a688350f448ab39d4227d5031b2c23efeede3fb2 Mon Sep 17 00:00:00 2001 From: Luke Parker Date: Wed, 8 Nov 2023 01:25:20 -0500 Subject: [PATCH] Have processor's Network::new sleep until booted, not panic --- processor/src/networks/bitcoin.rs | 8 +++++++- processor/src/networks/monero.rs | 8 +++++++- processor/src/tests/literal/mod.rs | 19 ++----------------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/processor/src/networks/bitcoin.rs b/processor/src/networks/bitcoin.rs index f8d1498d..775af7da 100644 --- a/processor/src/networks/bitcoin.rs +++ b/processor/src/networks/bitcoin.rs @@ -305,7 +305,13 @@ impl Eq for Bitcoin {} impl Bitcoin { pub async fn new(url: String) -> Bitcoin { - Bitcoin { rpc: Rpc::new(url).await.expect("couldn't create a Bitcoin RPC") } + let mut res = Rpc::new(url.clone()).await; + while let Err(e) = res { + log::error!("couldn't connect to Bitcoin node: {e:?}"); + tokio::time::sleep(Duration::from_secs(5)).await; + res = Rpc::new(url.clone()).await; + } + Bitcoin { rpc: res.unwrap() } } #[cfg(test)] diff --git a/processor/src/networks/monero.rs b/processor/src/networks/monero.rs index 22f02bcc..0a397cf6 100644 --- a/processor/src/networks/monero.rs +++ b/processor/src/networks/monero.rs @@ -192,7 +192,13 @@ fn map_rpc_err(err: RpcError) -> NetworkError { impl Monero { pub async fn new(url: String) -> Monero { - Monero { rpc: HttpRpc::new(url).await.unwrap() } + let mut res = HttpRpc::new(url.clone()).await; + while let Err(e) = res { + log::error!("couldn't connect to Monero node: {e:?}"); + tokio::time::sleep(Duration::from_secs(5)).await; + res = HttpRpc::new(url.clone()).await; + } + Monero { rpc: res.unwrap() } } fn view_pair(spend: EdwardsPoint) -> ViewPair { diff --git a/processor/src/tests/literal/mod.rs b/processor/src/tests/literal/mod.rs index b0bb4c74..f7cd72fb 100644 --- a/processor/src/tests/literal/mod.rs +++ b/processor/src/tests/literal/mod.rs @@ -50,14 +50,7 @@ mod bitcoin { async fn bitcoin(ops: &DockerOperations) -> Bitcoin { let handle = ops.handle("serai-dev-bitcoin").host_port(8332).unwrap(); - let url = format!("http://serai:seraidex@{}:{}", handle.0, handle.1); - for _ in 0 .. 20 { - if bitcoin_serai::rpc::Rpc::new(url.clone()).await.is_ok() { - break; - } - tokio::time::sleep(core::time::Duration::from_secs(1)).await; - } - let bitcoin = Bitcoin::new(url).await; + let bitcoin = Bitcoin::new(format!("http://serai:seraidex@{}:{}", handle.0, handle.1)).await; bitcoin.fresh_chain().await; bitcoin } @@ -114,15 +107,7 @@ mod monero { async fn monero(ops: &DockerOperations) -> Monero { let handle = ops.handle("serai-dev-monero").host_port(18081).unwrap(); - let url = format!("http://serai:seraidex@{}:{}", handle.0, handle.1); - for _ in 0 .. 60 { - if monero_serai::rpc::HttpRpc::new(url.clone()).await.is_ok() { - break; - } - tokio::time::sleep(core::time::Duration::from_secs(1)).await; - } - - let monero = Monero::new(url).await; + let monero = Monero::new(format!("http://serai:seraidex@{}:{}", handle.0, handle.1)).await; while monero.get_latest_block_number().await.unwrap() < 150 { monero.mine_block().await; }