From c2b153ccd2475bdce8dc079ac79251dec101f2cf Mon Sep 17 00:00:00 2001 From: Mariusz Klochowicz Date: Thu, 16 Sep 2021 13:45:07 +0930 Subject: [PATCH] Wait for the maker if it is not online Taker now prints a message if maker was not online, and waits for preconfigured interval before trying again. --- daemon/src/taker.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/daemon/src/taker.rs b/daemon/src/taker.rs index d259338..43295c2 100644 --- a/daemon/src/taker.rs +++ b/daemon/src/taker.rs @@ -10,6 +10,8 @@ use rocket_db_pools::Database; use seed::Seed; use std::net::SocketAddr; use std::path::PathBuf; +use std::thread::sleep; +use std::time::Duration; use tokio::sync::watch; mod db; @@ -23,6 +25,8 @@ mod taker_inc_message_actor; mod to_sse_event; mod wire; +const CONNECTION_RETRY_INTERVAL: Duration = Duration::from_secs(5); + #[derive(Database)] #[database("taker")] pub struct Db(sqlx::SqlitePool); @@ -88,13 +92,18 @@ async fn main() -> Result<()> { let (order_feed_sender, order_feed_receiver) = watch::channel::>(None); let (_balance_feed_sender, balance_feed_receiver) = watch::channel::(Amount::ZERO); - let socket = tokio::net::TcpSocket::new_v4()?; - let connection = socket - .connect(opts.taker) - .await - .expect("Maker should be online first"); - - let (read, write) = connection.into_split(); + let (read, write) = loop { + let socket = tokio::net::TcpSocket::new_v4()?; + if let Ok(connection) = socket.connect(opts.taker).await { + break connection.into_split(); + } else { + println!( + "Could not connect to the maker, retrying in {}s ...", + CONNECTION_RETRY_INTERVAL.as_secs() + ); + sleep(CONNECTION_RETRY_INTERVAL); + } + }; let figment = rocket::Config::figment() .merge(("databases.taker.url", data_dir.join("taker.sqlite")))