diff --git a/bin/nanocld/src/models/task_manager.rs b/bin/nanocld/src/models/task_manager.rs index fd49ec5c6..42ce47cea 100644 --- a/bin/nanocld/src/models/task_manager.rs +++ b/bin/nanocld/src/models/task_manager.rs @@ -1,10 +1,12 @@ use std::{ sync::{Arc, Mutex}, collections::HashMap, + future::IntoFuture, + ops::Deref, }; use ntex::{rt, web}; -use futures_util::Future; +use futures_util::{Future, FutureExt}; use nanocl_error::io::{IoResult, IoError}; @@ -43,7 +45,8 @@ impl TaskManager { let mut tasks = tasks .lock() .map_err(|err| IoError::interupted("Task", err.to_string().as_str()))?; - tasks.insert(key, task); + log::debug!("Adding task: {key} {}", task.kind); + tasks.insert(key.clone(), task.clone()); Ok::<_, IoError>(()) }) .await?; @@ -59,6 +62,7 @@ impl TaskManager { .map_err(|err| IoError::interupted("Task", err.to_string().as_str()))?; let task = tasks.get(&key); if let Some(task) = task { + log::debug!("Removing task: {key} {}", task.kind); task.fut.abort(); } tasks.remove(&key); diff --git a/bin/nanocld/src/subsystem/event.rs b/bin/nanocld/src/subsystem/event.rs index 0ad3afecf..ec8da581b 100644 --- a/bin/nanocld/src/subsystem/event.rs +++ b/bin/nanocld/src/subsystem/event.rs @@ -285,6 +285,11 @@ async fn update(e: &Event, state: &SystemState) -> IoResult<()> { let mut error = None; match actor.kind { EventActorKind::Cargo => { + let task_key = format!("{}@{key}", &actor.kind); + let curr_task = state.task_manager.get_task(&task_key).await; + if curr_task.is_some() { + state.task_manager.remove_task(&task_key).await?; + } let cargo = CargoDb::transform_read_by_pk(&key, &state.pool).await?; let processes = ProcessDb::read_by_kind_key(&key, &state.pool).await?; // Create instance with the new spec