fix: pass pre-bound TcpListener to run_server to fix Windows CI test race (#8542)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1099,6 +1099,9 @@ Windmill Community Edition {GIT_VERSION}
|
|||||||
}
|
}
|
||||||
|
|
||||||
let addr = SocketAddr::from((server_bind_address, port));
|
let addr = SocketAddr::from((server_bind_address, port));
|
||||||
|
let listener = tokio::net::TcpListener::bind(addr)
|
||||||
|
.await
|
||||||
|
.context("binding main windmill server")?;
|
||||||
|
|
||||||
let (base_internal_tx, base_internal_rx) = tokio::sync::oneshot::channel::<String>();
|
let (base_internal_tx, base_internal_rx) = tokio::sync::oneshot::channel::<String>();
|
||||||
|
|
||||||
@@ -1232,7 +1235,7 @@ Windmill Community Edition {GIT_VERSION}
|
|||||||
db.clone(),
|
db.clone(),
|
||||||
index_reader,
|
index_reader,
|
||||||
log_index_reader,
|
log_index_reader,
|
||||||
addr,
|
listener,
|
||||||
server_killpill_rx,
|
server_killpill_rx,
|
||||||
base_internal_tx,
|
base_internal_tx,
|
||||||
server_mode,
|
server_mode,
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ use windmill_common::global_settings::EMAIL_DOMAIN_SETTING;
|
|||||||
use windmill_common::worker::HUB_CACHE_DIR;
|
use windmill_common::worker::HUB_CACHE_DIR;
|
||||||
|
|
||||||
use std::fs::DirBuilder;
|
use std::fs::DirBuilder;
|
||||||
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{net::SocketAddr, sync::Arc};
|
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
use tower::ServiceBuilder;
|
use tower::ServiceBuilder;
|
||||||
use tower_cookies::CookieManagerLayer;
|
use tower_cookies::CookieManagerLayer;
|
||||||
@@ -326,7 +326,7 @@ pub async fn run_server(
|
|||||||
db: DB,
|
db: DB,
|
||||||
job_index_reader: Option<IndexReader>,
|
job_index_reader: Option<IndexReader>,
|
||||||
log_index_reader: Option<ServiceLogIndexReader>,
|
log_index_reader: Option<ServiceLogIndexReader>,
|
||||||
addr: SocketAddr,
|
listener: tokio::net::TcpListener,
|
||||||
mut killpill_rx: tokio::sync::broadcast::Receiver<()>,
|
mut killpill_rx: tokio::sync::broadcast::Receiver<()>,
|
||||||
port_tx: tokio::sync::oneshot::Sender<String>,
|
port_tx: tokio::sync::oneshot::Sender<String>,
|
||||||
server_mode: bool,
|
server_mode: bool,
|
||||||
@@ -412,6 +412,9 @@ pub async fn run_server(
|
|||||||
auth_cache: auth_cache.clone(),
|
auth_cache: auth_cache.clone(),
|
||||||
base_internal_url: _base_internal_url.clone(),
|
base_internal_url: _base_internal_url.clone(),
|
||||||
});
|
});
|
||||||
|
let addr = listener
|
||||||
|
.local_addr()
|
||||||
|
.unwrap_or_else(|_| std::net::SocketAddr::from(([127, 0, 0, 1], 0)));
|
||||||
if let Err(err) = smtp_server.start_listener_thread(addr).await {
|
if let Err(err) = smtp_server.start_listener_thread(addr).await {
|
||||||
tracing::error!("Error starting SMTP server: {err:#}");
|
tracing::error!("Error starting SMTP server: {err:#}");
|
||||||
}
|
}
|
||||||
@@ -452,9 +455,6 @@ pub async fn run_server(
|
|||||||
health::start_health_check_loop(db.clone(), killpill_rx.resubscribe());
|
health::start_health_check_loop(db.clone(), killpill_rx.resubscribe());
|
||||||
}
|
}
|
||||||
|
|
||||||
let listener = tokio::net::TcpListener::bind(addr)
|
|
||||||
.await
|
|
||||||
.context("binding main windmill server")?;
|
|
||||||
let port = listener.local_addr().map(|x| x.port()).unwrap_or(8000);
|
let port = listener.local_addr().map(|x| x.port()).unwrap_or(8000);
|
||||||
let ip = listener
|
let ip = listener
|
||||||
.local_addr()
|
.local_addr()
|
||||||
|
|||||||
@@ -97,14 +97,13 @@ impl ApiServer {
|
|||||||
async fn start_inner(db: Pool<Postgres>, agent_mode: bool) -> anyhow::Result<Self> {
|
async fn start_inner(db: Pool<Postgres>, agent_mode: bool) -> anyhow::Result<Self> {
|
||||||
let (tx, rx) = tokio::sync::broadcast::channel::<()>(1);
|
let (tx, rx) = tokio::sync::broadcast::channel::<()>(1);
|
||||||
|
|
||||||
let sock = tokio::net::TcpListener::bind("127.0.0.1:0")
|
let listener = tokio::net::TcpListener::bind("127.0.0.1:0")
|
||||||
.await
|
.await
|
||||||
.map_err(|e| anyhow::anyhow!("failed to bind TCP listener: {}", e))?;
|
.map_err(|e| anyhow::anyhow!("failed to bind TCP listener: {}", e))?;
|
||||||
|
|
||||||
let addr = sock
|
let addr = listener
|
||||||
.local_addr()
|
.local_addr()
|
||||||
.map_err(|e| anyhow::anyhow!("failed to get local address: {}", e))?;
|
.map_err(|e| anyhow::anyhow!("failed to get local address: {}", e))?;
|
||||||
drop(sock);
|
|
||||||
let (port_tx, _port_rx) = tokio::sync::oneshot::channel::<String>();
|
let (port_tx, _port_rx) = tokio::sync::oneshot::channel::<String>();
|
||||||
let name = next_worker_name();
|
let name = next_worker_name();
|
||||||
tracing::info!("starting api server for name={name}");
|
tracing::info!("starting api server for name={name}");
|
||||||
@@ -112,7 +111,7 @@ impl ApiServer {
|
|||||||
db.clone(),
|
db.clone(),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
addr,
|
listener,
|
||||||
rx,
|
rx,
|
||||||
port_tx,
|
port_tx,
|
||||||
agent_mode,
|
agent_mode,
|
||||||
|
|||||||
Reference in New Issue
Block a user