Skip to content

Commit 905b2e2

Browse files
committed
fix flaky graceful shutdown
1 parent b4f8fdc commit 905b2e2

1 file changed

Lines changed: 30 additions & 4 deletions

File tree

crates/datadog-trace-agent/src/mini_agent.rs

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -397,9 +397,22 @@ impl MiniAgent {
397397
let conn = hyper_util::rt::TokioIo::new(conn);
398398
let server = server.clone();
399399
let service = service.clone();
400+
let mut conn_shutdown = shutdown_rx.clone();
400401
joinset.spawn(async move {
401-
if let Err(e) = server.serve_connection(conn, service).await {
402-
error!("TCP connection error: {e}");
402+
let conn = server.serve_connection(conn, service);
403+
tokio::pin!(conn);
404+
tokio::select! {
405+
result = conn.as_mut() => {
406+
if let Err(e) = result {
407+
error!("TCP connection error: {e}");
408+
}
409+
}
410+
_ = conn_shutdown.changed() => {
411+
conn.as_mut().graceful_shutdown();
412+
if let Err(e) = conn.await {
413+
error!("TCP connection error during graceful shutdown: {e}");
414+
}
415+
}
403416
}
404417
});
405418
}
@@ -484,9 +497,22 @@ impl MiniAgent {
484497
let conn = hyper_util::rt::TokioIo::new(conn);
485498
let server = server.clone();
486499
let service = service.clone();
500+
let mut conn_shutdown = shutdown_rx.clone();
487501
joinset.spawn(async move {
488-
if let Err(e) = server.serve_connection(conn, service).await {
489-
error!("Named pipe connection error: {e}");
502+
let conn = server.serve_connection(conn, service);
503+
tokio::pin!(conn);
504+
tokio::select! {
505+
result = conn.as_mut() => {
506+
if let Err(e) = result {
507+
error!("Named pipe connection error: {e}");
508+
}
509+
}
510+
_ = conn_shutdown.changed() => {
511+
conn.as_mut().graceful_shutdown();
512+
if let Err(e) = conn.await {
513+
error!("Named pipe connection error during graceful shutdown: {e}");
514+
}
515+
}
490516
}
491517
});
492518
}

0 commit comments

Comments
 (0)