diff --git a/binaries/daemon/src/local_listener.rs b/binaries/daemon/src/local_listener.rs index fec1bb23..4c4a4faa 100644 --- a/binaries/daemon/src/local_listener.rs +++ b/binaries/daemon/src/local_listener.rs @@ -19,9 +19,15 @@ pub struct DynamicNodeEventWrapper { pub async fn spawn_listener_loop( bind: SocketAddr, events_tx: flume::Sender>, -) -> eyre::Result { +) -> eyre::Result> { let socket = match TcpListener::bind(bind).await { Ok(socket) => socket, + Err(err) if err.kind() == ErrorKind::AddrInUse => { + tracing::warn!( + "Daemon listen port already in use. There might be another daemon running already." + ); + return Ok(None); + } Err(err) => { return Err(eyre::Report::new(err).wrap_err("failed to create local TCP listener")) } @@ -35,7 +41,7 @@ pub async fn spawn_listener_loop( listener_loop(socket, events_tx).await; }); - Ok(listen_port) + Ok(Some(listen_port)) } async fn listener_loop( diff --git a/examples/multiple-daemons/run.rs b/examples/multiple-daemons/run.rs index f2d62cdd..825b4660 100644 --- a/examples/multiple-daemons/run.rs +++ b/examples/multiple-daemons/run.rs @@ -54,8 +54,8 @@ async fn main() -> eyre::Result<()> { ) .await?; let coordinator_addr = Ipv4Addr::LOCALHOST; - let daemon_a = run_daemon(coordinator_addr.to_string(), "A", 9843); // Random port - let daemon_b = run_daemon(coordinator_addr.to_string(), "B", 9842); + let daemon_a = run_daemon(coordinator_addr.to_string(), "A"); + let daemon_b = run_daemon(coordinator_addr.to_string(), "B"); tracing::info!("Spawning coordinator and daemons"); let mut tasks = JoinSet::new(); @@ -221,11 +221,7 @@ async fn build_dataflow(dataflow: &Path) -> eyre::Result<()> { Ok(()) } -async fn run_daemon( - coordinator: String, - machine_id: &str, - local_listen_port: u16, -) -> eyre::Result<()> { +async fn run_daemon(coordinator: String, machine_id: &str) -> eyre::Result<()> { let cargo = std::env::var("CARGO").unwrap(); let mut cmd = tokio::process::Command::new(&cargo); cmd.arg("run"); @@ -237,7 +233,7 @@ async fn run_daemon( .arg("--coordinator-addr") .arg(coordinator) .arg("--local-listen-port") - .arg(local_listen_port.to_string()); + .arg("9843"); // random port if !cmd.status().await?.success() { bail!("failed to run dataflow"); };