Fix cleanup task shutdown
This commit is contained in:
parent
d0171df934
commit
4ce64b536c
16
src/main.rs
16
src/main.rs
|
@ -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");
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue