diff --git a/app/services/run_service.py b/app/services/run_service.py index 8eda7aa..20f9246 100644 --- a/app/services/run_service.py +++ b/app/services/run_service.py @@ -482,8 +482,18 @@ class RunService: # Remove task_id mapping from Redis self.redis.delete(f"{self.task_key_prefix}{run_id}") - # Note: We don't delete from run_cache as that's a permanent record - # of completed work. The content itself remains in cache. + # Remove from run_cache database table + try: + await self.db.delete_run_cache(run_id) + except Exception as e: + import logging + logging.getLogger(__name__).warning(f"Failed to delete run_cache for {run_id}: {e}") + + # Remove pending run if exists + try: + await self.db.delete_pending_run(run_id) + except Exception: + pass return True, None diff --git a/database.py b/database.py index 40dda57..a36dcf7 100644 --- a/database.py +++ b/database.py @@ -1207,6 +1207,26 @@ async def list_runs_by_actor(actor_id: str, offset: int = 0, limit: int = 20) -> ] +async def delete_run_cache(run_id: str) -> bool: + """Delete a run from the cache.""" + async with pool.acquire() as conn: + result = await conn.execute( + "DELETE FROM run_cache WHERE run_id = $1", + run_id + ) + return result == "DELETE 1" + + +async def delete_pending_run(run_id: str) -> bool: + """Delete a pending run.""" + async with pool.acquire() as conn: + result = await conn.execute( + "DELETE FROM pending_runs WHERE run_id = $1", + run_id + ) + return result == "DELETE 1" + + # ============ Storage Backends ============ async def get_user_storage(actor_id: str) -> List[dict]: