github-actions
Deploy to Hugging Face
c794b6b
|
Raw
History Blame Contribute Delete
1.74 kB
# Backend Audit Report
## Concurrency Issues
1. **ConnectionManager Broadcast Modification**: The WebSocket `ConnectionManager.broadcast` and `broadcast_to_agents` methods were iterating directly over `self.active_connections` and `self.agent_connections`. If an asynchronous operation yielded and a client disconnected, the list size would change during iteration, leading to skipped clients or iteration errors.
2. **Global Locks**: `store_locks.sos_lock` is used appropriately when appending to `sos_events`. However, lists like `detections_history` do not have an explicit async lock around them. Since `_upsert_detection_sighting` is mostly synchronous except when awaited inside other async handlers, it may not immediately corrupt but can cause interleaved updates.
## Memory Issues
1. **Detections History Unbounded Growth**: Most memory lists (like `alerts_db`, `sos_events`, `agentic_plans`) are bounded using `_trim_memory_list` to prevent memory leaks in the long-running process. However, `detections_history` currently grows unbounded. When new faces are detected (or unique names generated), `detections_history.append(entry)` is called without trimming, leading to a slow memory leak over days/weeks of continuous operation.
## Exception Handling
1. **Heartbeat Silence**: The `_ws_send_heartbeat` background task contains a `try...except Exception: pass` block. If `send_personal_message` encounters an error, the heartbeat task exits silently, meaning the proxy might drop idle connections because heartbeats cease without warning.
2. **Agent Stream Errors**: In `agents_ws`, `agent_step` exceptions are caught, but `manager.send_personal_message` during an error state might itself fail if the websocket has disconnected.