From 23a4c37f2451ec5b26661ceb81ff34b77278c41f Mon Sep 17 00:00:00 2001 From: Andrei Sousa Date: Sun, 4 Oct 2020 17:31:01 +0200 Subject: [PATCH] feat: Testing gracefully shutting down hyper server --- src/main.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 92c8e38..8bb8855 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ use hyper::Server; use serde::{Deserialize, Serialize}; use std::env; use std::sync::Arc; +use tokio::signal::unix::{signal, SignalKind}; use tokio::sync::Mutex; use tracing::info; @@ -98,7 +99,31 @@ async fn main() -> Result<(), Box> { info!("Listening on http://{}", addr); - server.await?; + let (tx, rx) = tokio::sync::oneshot::channel::<()>(); + let graceful = server.with_graceful_shutdown(async { + rx.await.ok(); + }); + + tokio::task::spawn(async move { + let kind = SignalKind::interrupt(); + let mut stream = signal(kind).expect("error opening signal stream"); + + loop { + stream.recv().await; + info!("Termination initiated"); + break; + } + tx.send(()).expect("error sending shutdown signal"); + }); + + graceful.await?; + + //TODO: function to clear state + // let vms = state.vms.lock().unwrap(); + // for a in vms.iter() { + // println!("{}", a.name); + // vm::terminate(&a.name).await?; + // } Ok(()) }