@@ -25,7 +25,8 @@ use actix_web::middleware::Next;
25
25
use actix_web:: { Error , HttpResponse } ;
26
26
use lazy_static:: lazy_static;
27
27
use std:: sync:: Arc ;
28
- use tokio:: signal:: unix:: { signal, SignalKind } ;
28
+ use tokio:: signal:: ctrl_c;
29
+
29
30
use tokio:: sync:: { oneshot, Mutex } ;
30
31
31
32
// Create a global variable to store signal status
@@ -52,35 +53,45 @@ pub async fn check_shutdown_middleware(
52
53
}
53
54
54
55
pub async fn handle_signals ( shutdown_signal : Arc < Mutex < Option < oneshot:: Sender < ( ) > > > > ) {
55
- let mut sigterm =
56
- signal ( SignalKind :: terminate ( ) ) . expect ( "Failed to set up SIGTERM signal handler" ) ;
57
- log:: info!( "Signal handler task started" ) ;
58
-
59
- // Block until SIGTERM is received
60
- match sigterm. recv ( ) . await {
61
- Some ( _) => {
62
- log:: info!( "Received SIGTERM signal at Readiness Probe Handler" ) ;
63
-
64
- // Set the shutdown flag to true
65
- let mut shutdown_flag = SIGNAL_RECEIVED . lock ( ) . await ;
66
- * shutdown_flag = true ;
67
-
68
- // Sync to local
69
- crate :: event:: STREAM_WRITERS . unset_all ( ) ;
70
-
71
- // Trigger graceful shutdown
72
- if let Some ( shutdown_sender) = shutdown_signal. lock ( ) . await . take ( ) {
73
- let _ = shutdown_sender. send ( ( ) ) ;
56
+ #[ cfg( windows) ]
57
+ {
58
+ tokio:: select! {
59
+ _ = ctrl_c( ) => {
60
+ log:: info!( "Received SIGINT signal at Readiness Probe Handler" ) ;
61
+ shutdown( shutdown_signal) . await ;
74
62
}
75
63
}
76
- None => {
77
- log:: info!( "Signal handler received None, indicating an error or end of stream" ) ;
64
+ }
65
+ #[ cfg( unix) ]
66
+ {
67
+ use tokio:: signal:: unix:: { signal, SignalKind } ;
68
+ let mut sigterm = signal ( SignalKind :: terminate ( ) ) . unwrap ( ) ;
69
+ tokio:: select! {
70
+ _ = ctrl_c( ) => {
71
+ log:: info!( "Received SIGINT signal at Readiness Probe Handler" ) ;
72
+ shutdown( shutdown_signal) . await ;
73
+ } ,
74
+ _ = sigterm. recv( ) => {
75
+ log:: info!( "Received SIGTERM signal at Readiness Probe Handler" ) ;
76
+ shutdown( shutdown_signal) . await ;
77
+ }
78
78
}
79
79
}
80
-
81
- log:: info!( "Signal handler task completed" ) ;
82
80
}
83
81
82
+ async fn shutdown ( shutdown_signal : Arc < Mutex < Option < oneshot:: Sender < ( ) > > > > ) {
83
+ // Set the shutdown flag to true
84
+ let mut shutdown_flag = SIGNAL_RECEIVED . lock ( ) . await ;
85
+ * shutdown_flag = true ;
86
+
87
+ // Sync to local
88
+ crate :: event:: STREAM_WRITERS . unset_all ( ) ;
89
+
90
+ // Trigger graceful shutdown
91
+ if let Some ( shutdown_sender) = shutdown_signal. lock ( ) . await . take ( ) {
92
+ let _ = shutdown_sender. send ( ( ) ) ;
93
+ }
94
+ }
84
95
pub async fn readiness ( ) -> HttpResponse {
85
96
// Check the object store connection
86
97
if CONFIG . storage ( ) . get_object_store ( ) . check ( ) . await . is_ok ( ) {
0 commit comments