Fix cleanup task shutdown

This commit is contained in:
lemonsh 2022-04-06 09:02:54 +02:00
parent d0171df934
commit 4ce64b536c

View file

@ -74,7 +74,7 @@ async fn main() -> anyhow::Result<()> {
let session_store = PostgresSessionStore::from_client(database.pool()).with_table_name("sessions");
session_store.migrate().await?;
let cleanup_task = spawn_session_cleanup_task(&session_store, Duration::from_secs(600));
let cleanup_task = spawn_session_cleanup_task(&session_store, Duration::from_secs(600), ctx.subscribe());
info!("Started session cleanup task");
let web_app = App::new(cfg.clone(), database.clone())?;
@ -82,6 +82,7 @@ async fn main() -> anyhow::Result<()> {
info!("Started the web app at http://{}", cfg.listen_addr);
terminate_signal().await;
ctx.send(()).unwrap();
cleanup_task
.await
@ -94,14 +95,19 @@ async fn main() -> anyhow::Result<()> {
Ok(())
}
fn spawn_session_cleanup_task(store: &PostgresSessionStore, period: Duration) -> JoinHandle<()> {
fn spawn_session_cleanup_task(store: &PostgresSessionStore, period: Duration, mut cancel: broadcast::Receiver<()>) -> JoinHandle<()> {
let store = store.clone();
tokio::spawn(async move {
loop {
sleep(period).await;
if let Err(error) = store.cleanup().await {
error!("cleanup error: {}", error);
tokio::select! {
_ = sleep(period) => {
if let Err(error) = store.cleanup().await {
error!("Error in cleanup task: {}", error);
}
}
_ = cancel.recv() => break
}
}
info!("Cleanup task has been shut down");
})
}