Browse Source

Don't error if local listen port is already in use

tags/v0.3.10-rc3
Philipp Oppermann 11 months ago
parent
commit
8f87659b4f
Failed to extract signature
2 changed files with 12 additions and 10 deletions
  1. +8
    -2
      binaries/daemon/src/local_listener.rs
  2. +4
    -8
      examples/multiple-daemons/run.rs

+ 8
- 2
binaries/daemon/src/local_listener.rs View File

@@ -19,9 +19,15 @@ pub struct DynamicNodeEventWrapper {
pub async fn spawn_listener_loop(
bind: SocketAddr,
events_tx: flume::Sender<Timestamped<DynamicNodeEventWrapper>>,
) -> eyre::Result<u16> {
) -> eyre::Result<Option<u16>> {
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(


+ 4
- 8
examples/multiple-daemons/run.rs View File

@@ -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");
};


Loading…
Cancel
Save