Skip to content

Commit 97e4fb2

Browse files
Merge pull request #144 from code0-tech/143-shutdown-on-sigterm
Shutdown on Sigterm
2 parents 9d625a8 + ce0eb27 commit 97e4fb2

1 file changed

Lines changed: 33 additions & 14 deletions

File tree

crates/base/src/runner.rs

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,22 @@ 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+
#[cfg(unix)]
100+
let sigterm = async {
101+
use tokio::signal::unix::{SignalKind, signal};
102+
103+
let mut term =
104+
signal(SignalKind::terminate()).expect("failed to install SIGTERM handler");
105+
term.recv().await;
106+
};
107+
108+
#[cfg(not(unix))]
109+
let sigterm = std::future::pending::<()>();
110+
100111
match health_task {
101112
Some(mut ht) => {
102113
tokio::select! {
@@ -113,28 +124,36 @@ impl<C: LoadConfig> ServerRunner<C> {
113124
server.shutdown(&context).await?;
114125
}
115126

116-
// Ctrl+C / SIGINT
127+
// Ctrl+C
117128
_ = signal::ctrl_c() => {
118129
log::info!("Ctrl+C/Exit signal received, shutting down adapter");
119130
server.shutdown(&context).await?;
120131
ht.abort();
121132
}
133+
_ = sigterm => {
134+
log::info!("SIGTERM received, shutting down adapter");
135+
server.shutdown(&context).await?;
136+
ht.abort();
137+
}
122138
}
123139
}
124-
125140
None => {
126141
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-
}
142+
// Adapter server loop ends on its own
143+
res = server.run(&context) => {
144+
log::warn!("Adapter server finished");
145+
res?;
146+
}
147+
148+
// Ctrl+C
149+
_ = signal::ctrl_c() => {
150+
log::info!("Ctrl+C/Exit signal received, shutting down adapter");
151+
server.shutdown(&context).await?;
152+
}
153+
_ = sigterm => {
154+
log::info!("SIGTERM received, shutting down adapter");
155+
server.shutdown(&context).await?;
156+
}
138157
}
139158
}
140159
}

0 commit comments

Comments
 (0)