Skip to content
This repository was archived by the owner on Jan 27, 2026. It is now read-only.

Commit 5e1a59d

Browse files
authored
Merge pull request #522 from PrimeIntellect-ai/imp/ability-to-delete-all-tasks
feat(orchestrator): ability to delete all tasks from orchestrator
1 parent 81ccba1 commit 5e1a59d

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

crates/orchestrator/src/api/routes/task.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,20 @@ async fn delete_task(id: web::Path<String>, app_state: Data<AppState>) -> HttpRe
7474
HttpResponse::Ok().json(json!({"success": true}))
7575
}
7676

77+
async fn delete_all_tasks(app_state: Data<AppState>) -> HttpResponse {
78+
let task_store = app_state.store_context.task_store.clone();
79+
if let Err(e) = task_store.delete_all_tasks().await {
80+
return HttpResponse::InternalServerError()
81+
.json(json!({"success": false, "error": e.to_string()}));
82+
}
83+
HttpResponse::Ok().json(json!({"success": true}))
84+
}
85+
7786
pub fn tasks_routes() -> Scope {
7887
web::scope("/tasks")
7988
.route("", get().to(get_all_tasks))
8089
.route("", post().to(create_task))
90+
.route("/all", delete().to(delete_all_tasks))
8191
.route("/{id}", delete().to(delete_task))
8292
}
8393

crates/orchestrator/src/store/domains/task_store.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,34 @@ impl TaskStore {
9393
Ok(())
9494
}
9595

96+
pub async fn delete_all_tasks(&self) -> Result<()> {
97+
let mut con = self.redis.client.get_multiplexed_async_connection().await?;
98+
99+
// Get all tasks first for observer notifications
100+
let tasks = self.get_all_tasks().await?;
101+
102+
// Delete all individual task keys
103+
for task in &tasks {
104+
let task_key = format!("{}{}", TASK_KEY_PREFIX, task.id);
105+
let _: () = con.del(&task_key).await?;
106+
}
107+
108+
// Clear the task list
109+
let _: () = con.del(TASK_LIST_KEY).await?;
110+
111+
// Notify observers synchronously
112+
let observers = self.observers.lock().unwrap().clone();
113+
for task in tasks {
114+
for observer in observers.iter() {
115+
if let Err(e) = observer.on_task_deleted(Some(task.clone())) {
116+
error!("Error notifying observer: {}", e);
117+
}
118+
}
119+
}
120+
121+
Ok(())
122+
}
123+
96124
pub async fn get_task(&self, id: &str) -> Result<Option<Task>> {
97125
let mut con = self.redis.client.get_multiplexed_async_connection().await?;
98126
let task_key = format!("{}{}", TASK_KEY_PREFIX, id);

0 commit comments

Comments
 (0)