huskies: merge 534_refactor_unify_timer_tick_watchdog_and_watcher_sweep_into_a_single_1_second_tick_loop
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
//! Watchdog task: detects orphaned agents and triggers auto-assign.
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::Mutex;
|
||||
use tokio::sync::broadcast;
|
||||
|
||||
use crate::slog;
|
||||
@@ -73,30 +72,11 @@ impl AgentPool {
|
||||
check_orphaned_agents(&self.agents);
|
||||
}
|
||||
|
||||
/// Spawn a background watchdog task that periodically checks for Running agents
|
||||
/// whose underlying task has already finished (orphaned entries). Any such agent
|
||||
/// is marked Failed and an Error event is emitted so that `wait_for_agent` unblocks.
|
||||
/// Run one watchdog pass and return the number of orphaned agents detected.
|
||||
///
|
||||
/// The watchdog runs every 30 seconds. It is a safety net for edge cases where the
|
||||
/// PTY read loop exits without updating the agent status (e.g. a panic in the
|
||||
/// spawn_blocking task, or an external SIGKILL that closes the PTY fd immediately).
|
||||
///
|
||||
/// When orphaned agents are detected and a `project_root` is provided, auto-assign
|
||||
/// is triggered so that free agents can pick up unassigned work.
|
||||
pub fn spawn_watchdog(pool: Arc<AgentPool>, project_root: Option<PathBuf>) {
|
||||
tokio::spawn(async move {
|
||||
let mut interval = tokio::time::interval(std::time::Duration::from_secs(30));
|
||||
loop {
|
||||
interval.tick().await;
|
||||
let found = check_orphaned_agents(&pool.agents);
|
||||
if found > 0
|
||||
&& let Some(ref root) = project_root
|
||||
{
|
||||
slog!("[watchdog] {found} orphaned agent(s) detected; triggering auto-assign.");
|
||||
pool.auto_assign_available_work(root).await;
|
||||
}
|
||||
}
|
||||
});
|
||||
/// Called by the unified background tick loop every 30 ticks.
|
||||
pub fn run_watchdog_pass(&self) -> usize {
|
||||
check_orphaned_agents(&self.agents)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user