From c7b0cfc88846b4b76aaba726d2470922d23d723f Mon Sep 17 00:00:00 2001 From: Dreaded_X Date: Sun, 20 Apr 2025 00:24:32 +0200 Subject: [PATCH] Gracefully shutdown if LDAP connection is lost --- src/ldap.rs | 7 ++++--- src/main.rs | 13 +++++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/ldap.rs b/src/ldap.rs index b4599d3..28ab0fc 100644 --- a/src/ldap.rs +++ b/src/ldap.rs @@ -3,7 +3,7 @@ use russh::keys::PublicKey; use tokio::select; use tokio::task::JoinHandle; use tokio_util::sync::CancellationToken; -use tracing::{debug, warn}; +use tracing::{debug, error}; #[derive(Debug, Clone)] pub struct Ldap { @@ -51,9 +51,10 @@ impl Ldap { select! { res = conn.drive() => { if let Err(err) = res { - warn!("LDAP connection error: {}", err); + error!("LDAP connection error: {}", err); } else { - debug!("LDAP drive has stopped, this should not happen?"); + error!("LDAP connection lost"); + token.cancel(); } } _ = token.cancelled() => { diff --git a/src/main.rs b/src/main.rs index fab6daa..054783c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,15 +15,20 @@ use siranga::web::{ForwardAuth, Service}; use tokio::net::TcpListener; use tokio::select; use tokio_util::sync::CancellationToken; -use tracing::{error, info, warn}; +use tracing::{debug, error, info, warn}; use tracing_subscriber::EnvFilter; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; async fn shutdown_task(token: CancellationToken) { - tokio::signal::ctrl_c() - .await - .expect("Failed to listen for ctrl-c event"); + select! { + _ = tokio::signal::ctrl_c() => { + debug!("Received SIGINT"); + } + _ = token.cancelled() => { + debug!("Application called for graceful shutdown"); + } + } info!("Starting graceful shutdown"); token.cancel(); tokio::time::sleep(Duration::from_secs(5)).await;