@@ -5,7 +5,7 @@ use crate::{
55} ;
66use code0_flow:: flow_service:: FlowUpdateService ;
77use std:: sync:: Arc ;
8- use tokio:: signal;
8+ use tokio:: signal:: { self , unix :: SignalKind , unix :: signal } ;
99use tonic:: transport:: Server ;
1010use 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