From 15f995d4aa3a48049c0f61a5f8f09768d91a4f0e Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 30 Jan 2026 16:01:21 +0100 Subject: [PATCH 1/4] feat: added SIGTERM shutdown to runner --- crates/base/src/runner.rs | 43 +++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/crates/base/src/runner.rs b/crates/base/src/runner.rs index d4c82f1..bb043f9 100644 --- a/crates/base/src/runner.rs +++ b/crates/base/src/runner.rs @@ -5,7 +5,7 @@ use crate::{ }; use code0_flow::flow_service::FlowUpdateService; use std::sync::Arc; -use tokio::signal; +use tokio::signal::{self, unix::SignalKind, unix::signal}; use tonic::transport::Server; use tonic_health::pb::health_server::HealthServer; @@ -92,11 +92,16 @@ impl ServerRunner { mut server, context, } = self; - // Init the adapter server (e.g. create underlying HTTP server) server.init(&context).await?; log::info!("Draco successfully initialized."); + let sigterm = async { + let mut term = + signal(SignalKind::terminate()).expect("failed to install SIGTERM handler"); + term.recv().await; + }; + match health_task { Some(mut ht) => { tokio::select! { @@ -113,28 +118,36 @@ impl ServerRunner { server.shutdown(&context).await?; } - // Ctrl+C / SIGINT + // Ctrl+C _ = signal::ctrl_c() => { log::info!("Ctrl+C/Exit signal received, shutting down adapter"); server.shutdown(&context).await?; ht.abort(); } + _ = sigterm => { + log::info!("SIGTERM received, shutting down adapter"); + server.shutdown(&context).await?; + ht.abort(); + } } } - None => { tokio::select! { - // Adapter server loop ends on its own - res = server.run(&context) => { - log::warn!("Adapter server finished"); - res?; - } - - // Ctrl+C / SIGINT - _ = signal::ctrl_c() => { - log::info!("Ctrl+C/Exit signal received, shutting down adapter"); - server.shutdown(&context).await?; - } + // Adapter server loop ends on its own + res = server.run(&context) => { + log::warn!("Adapter server finished"); + res?; + } + + // Ctrl+C + _ = signal::ctrl_c() => { + log::info!("Ctrl+C/Exit signal received, shutting down adapter"); + server.shutdown(&context).await?; + } + _ = sigterm => { + log::info!("SIGTERM received, shutting down adapter"); + server.shutdown(&context).await?; + } } } } From 9e518261420e2a7b1c6e8fb4086aa62d4aa43183 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 30 Jan 2026 16:01:56 +0100 Subject: [PATCH 2/4] ref: cargo fmt fixes --- crates/base/src/runner.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/base/src/runner.rs b/crates/base/src/runner.rs index bb043f9..4dc43a4 100644 --- a/crates/base/src/runner.rs +++ b/crates/base/src/runner.rs @@ -139,7 +139,7 @@ impl ServerRunner { res?; } - // Ctrl+C + // Ctrl+C _ = signal::ctrl_c() => { log::info!("Ctrl+C/Exit signal received, shutting down adapter"); server.shutdown(&context).await?; From c0bfc950267e41034278bbd8f36898e9361155e0 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 30 Jan 2026 16:31:57 +0100 Subject: [PATCH 3/4] fix: add unix config for windows to be able to compile --- crates/base/src/runner.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/base/src/runner.rs b/crates/base/src/runner.rs index 4dc43a4..b191eb7 100644 --- a/crates/base/src/runner.rs +++ b/crates/base/src/runner.rs @@ -5,7 +5,7 @@ use crate::{ }; use code0_flow::flow_service::FlowUpdateService; use std::sync::Arc; -use tokio::signal::{self, unix::SignalKind, unix::signal}; +use tokio::signal::{self}; use tonic::transport::Server; use tonic_health::pb::health_server::HealthServer; @@ -96,12 +96,18 @@ impl ServerRunner { server.init(&context).await?; log::info!("Draco successfully initialized."); + #[cfg(unix)] let sigterm = async { + use tokio::signal::unix::{SignalKind, signal}; + let mut term = signal(SignalKind::terminate()).expect("failed to install SIGTERM handler"); term.recv().await; }; + #[cfg(not(unix))] + let sigterm = std::future::pending::<()>(); + match health_task { Some(mut ht) => { tokio::select! { From ce0eb2790237aad36663840a2e1a6b109f85768e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raphael=20G=C3=B6tz?= <52959657+raphael-goetz@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:37:26 +0100 Subject: [PATCH 4/4] Update crates/base/src/runner.rs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Raphael Götz <52959657+raphael-goetz@users.noreply.github.com> --- crates/base/src/runner.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/base/src/runner.rs b/crates/base/src/runner.rs index b191eb7..5c2b59b 100644 --- a/crates/base/src/runner.rs +++ b/crates/base/src/runner.rs @@ -5,7 +5,7 @@ use crate::{ }; use code0_flow::flow_service::FlowUpdateService; use std::sync::Arc; -use tokio::signal::{self}; +use tokio::signal; use tonic::transport::Server; use tonic_health::pb::health_server::HealthServer;