Skip to content

Commit

Permalink
Revert "Allow rest api to shutdown (#3614)" (#3625)
Browse files Browse the repository at this point in the history
This reverts commit 4a09fed.
  • Loading branch information
quentinlesceller authored Mar 29, 2021
1 parent 0acf380 commit 25d93c8
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 22 deletions.
33 changes: 14 additions & 19 deletions api/src/rest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ use rustls::internal::pemfile;
use std::convert::Infallible;
use std::fmt::{self, Display};
use std::fs::File;
use std::mem;
use std::net::SocketAddr;
use std::sync::Arc;
use std::{io, thread};
Expand Down Expand Up @@ -200,26 +199,25 @@ impl ApiServer {
addr: SocketAddr,
router: Router,
) -> Result<thread::JoinHandle<()>, Error> {
if self.is_running() {
if self.shutdown_sender.is_some() {
return Err(ErrorKind::Internal(
"Can't start HTTP API server, it's running already".to_string(),
)
.into());
}
let (tx, rx) = oneshot::channel::<()>();
let (tx, _rx) = oneshot::channel::<()>();
self.shutdown_sender = Some(tx);
thread::Builder::new()
.name("apis".to_string())
.spawn(move || {
let server = async move {
let server = Server::bind(&addr)
.serve(make_service_fn(move |_| {
let router = router.clone();
async move { Ok::<_, Infallible>(router) }
}))
.with_graceful_shutdown(async {
rx.await.ok();
});
let server = Server::bind(&addr).serve(make_service_fn(move |_| {
let router = router.clone();
async move { Ok::<_, Infallible>(router) }
}));
// TODO graceful shutdown is unstable, investigate
//.with_graceful_shutdown(rx)

server.await
};

Expand All @@ -241,7 +239,7 @@ impl ApiServer {
router: Router,
conf: TLSConfig,
) -> Result<thread::JoinHandle<()>, Error> {
if self.is_running() {
if self.shutdown_sender.is_some() {
return Err(ErrorKind::Internal(
"Can't start HTTPS API server, it's running already".to_string(),
)
Expand Down Expand Up @@ -282,20 +280,17 @@ impl ApiServer {

/// Stops the API server, it panics in case of error
pub fn stop(&mut self) -> bool {
if self.is_running() {
let tx = mem::replace(&mut self.shutdown_sender, None).unwrap();
tx.send(()).expect("Failed to stop API server");
if self.shutdown_sender.is_some() {
// TODO re-enable stop after investigation
//let tx = mem::replace(&mut self.shutdown_sender, None).unwrap();
//tx.send(()).expect("Failed to stop API server");
info!("API server has been stopped");
true
} else {
error!("Can't stop API server, it's not running or doesn't spport stop operation");
false
}
}

pub fn is_running(&self) -> bool {
self.shutdown_sender.is_some()
}
}

pub struct LoggingMiddleware {}
Expand Down
3 changes: 0 additions & 3 deletions api/tests/rest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ fn test_start_api() {
assert_eq!(counter.value(), 1);
assert!(server.stop());
thread::sleep(time::Duration::from_millis(1_000));
assert!(!server.is_running());
}

// To enable this test you need a trusted PKCS12 (p12) certificate bundle
Expand All @@ -101,8 +100,6 @@ fn test_start_api_tls() {
let index = request_with_retry("https://yourdomain.com:14444/v1/").unwrap();
assert_eq!(index.len(), 2);
assert!(!server.stop());
thread::sleep(time::Duration::from_millis(1_000));
assert!(!server.is_running());
}

fn request_with_retry(url: &str) -> Result<Vec<String>, api::Error> {
Expand Down

0 comments on commit 25d93c8

Please sign in to comment.