@@ -38,7 +38,7 @@ use openid::Discovered;
3838use serde:: Deserialize ;
3939use serde:: Serialize ;
4040use ssl_acceptor:: get_ssl_acceptor;
41- use tokio:: sync:: { oneshot, Mutex } ;
41+ use tokio:: sync:: oneshot;
4242use tracing:: { error, info, warn} ;
4343
4444use super :: audit;
@@ -67,11 +67,12 @@ pub trait ParseableServer {
6767 async fn load_metadata ( & self ) -> anyhow:: Result < Option < Bytes > > ;
6868
6969 /// code that describes starting and setup procedures for each type of server
70- async fn init ( & self ) -> anyhow:: Result < ( ) > ;
70+ async fn init ( & self , shutdown_rx : oneshot :: Receiver < ( ) > ) -> anyhow:: Result < ( ) > ;
7171
7272 /// configure the server
7373 async fn start (
7474 & self ,
75+ shutdown_rx : oneshot:: Receiver < ( ) > ,
7576 prometheus : PrometheusMetrics ,
7677 oidc_client : Option < crate :: oidc:: OpenidConfig > ,
7778 ) -> anyhow:: Result < ( ) >
@@ -108,19 +109,6 @@ pub trait ParseableServer {
108109 . wrap ( cross_origin_config ( ) )
109110 } ;
110111
111- // Create a channel to trigger server shutdown
112- let ( shutdown_trigger, shutdown_rx) = oneshot:: channel :: < ( ) > ( ) ;
113- let server_shutdown_signal = Arc :: new ( Mutex :: new ( Some ( shutdown_trigger) ) ) ;
114-
115- // Clone the shutdown signal for the signal handler
116- let shutdown_signal = server_shutdown_signal. clone ( ) ;
117-
118- // Spawn the signal handler task
119- let signal_task = tokio:: spawn ( async move {
120- health_check:: handle_signals ( shutdown_signal) . await ;
121- println ! ( "Received shutdown signal, notifying server to shut down..." ) ;
122- } ) ;
123-
124112 // Create the HTTP server
125113 let http_server = HttpServer :: new ( create_app_fn)
126114 . workers ( num_cpus:: get ( ) )
@@ -142,6 +130,8 @@ pub trait ParseableServer {
142130 // Wait for the shutdown signal
143131 let _ = shutdown_rx. await ;
144132
133+ health_check:: shutdown ( ) . await ;
134+
145135 // Perform S3 sync and wait for completion
146136 info ! ( "Starting data sync to S3..." ) ;
147137 if let Err ( e) = CONFIG . storage ( ) . get_object_store ( ) . sync ( true ) . await {
@@ -158,11 +148,6 @@ pub trait ParseableServer {
158148 // Await the HTTP server to run
159149 let server_result = srv. await ;
160150
161- // Await the signal handler to ensure proper cleanup
162- if let Err ( e) = signal_task. await {
163- error ! ( "Error in signal handler: {:?}" , e) ;
164- }
165-
166151 // Wait for the sync task to complete before exiting
167152 if let Err ( e) = sync_task. await {
168153 error ! ( "Error in sync task: {:?}" , e) ;
0 commit comments