Skip to content

Commit 15f995d

Browse files
committed
feat: added SIGTERM shutdown to runner
1 parent 9d625a8 commit 15f995d

1 file changed

Lines changed: 28 additions & 15 deletions

File tree

crates/base/src/runner.rs

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::{
55
};
66
use code0_flow::flow_service::FlowUpdateService;
77
use std::sync::Arc;
8-
use tokio::signal;
8+
use tokio::signal::{self, unix::SignalKind, unix::signal};
99
use tonic::transport::Server;
1010
use tonic_health::pb::health_server::HealthServer;
1111

@@ -92,11 +92,16 @@ impl<C: LoadConfig> ServerRunner<C> {
9292
mut server,
9393
context,
9494
} = self;
95-
9695
// Init the adapter server (e.g. create underlying HTTP server)
9796
server.init(&context).await?;
9897
log::info!("Draco successfully initialized.");
9998

99+
let sigterm = async {
100+
let mut term =
101+
signal(SignalKind::terminate()).expect("failed to install SIGTERM handler");
102+
term.recv().await;
103+
};
104+
100105
match health_task {
101106
Some(mut ht) => {
102107
tokio::select! {
@@ -113,28 +118,36 @@ impl<C: LoadConfig> ServerRunner<C> {
113118
server.shutdown(&context).await?;
114119
}
115120

116-
// Ctrl+C / SIGINT
121+
// Ctrl+C
117122
_ = signal::ctrl_c() => {
118123
log::info!("Ctrl+C/Exit signal received, shutting down adapter");
119124
server.shutdown(&context).await?;
120125
ht.abort();
121126
}
127+
_ = sigterm => {
128+
log::info!("SIGTERM received, shutting down adapter");
129+
server.shutdown(&context).await?;
130+
ht.abort();
131+
}
122132
}
123133
}
124-
125134
None => {
126135
tokio::select! {
127-
// Adapter server loop ends on its own
128-
res = server.run(&context) => {
129-
log::warn!("Adapter server finished");
130-
res?;
131-
}
132-
133-
// Ctrl+C / SIGINT
134-
_ = signal::ctrl_c() => {
135-
log::info!("Ctrl+C/Exit signal received, shutting down adapter");
136-
server.shutdown(&context).await?;
137-
}
136+
// Adapter server loop ends on its own
137+
res = server.run(&context) => {
138+
log::warn!("Adapter server finished");
139+
res?;
140+
}
141+
142+
// Ctrl+C
143+
_ = signal::ctrl_c() => {
144+
log::info!("Ctrl+C/Exit signal received, shutting down adapter");
145+
server.shutdown(&context).await?;
146+
}
147+
_ = sigterm => {
148+
log::info!("SIGTERM received, shutting down adapter");
149+
server.shutdown(&context).await?;
150+
}
138151
}
139152
}
140153
}

0 commit comments

Comments
 (0)