Summary
Coordinator keeps stale request state when entry-stage submission fails.
When submit_to_stage raises in _submit_request, the coordinator can retain:
_requests[request_id]
_completion_futures[request_id]
This leaves partially-created request state in memory.
Impact
- State accumulation in long-running services
- Increased memory/GC pressure under repeated submit failures
- Inconsistent request bookkeeping after failed submit
Repro (minimal)
- Create a coordinator with one entry stage.
- Make
control_plane.submit_to_stage(...) raise an exception.
- Call
await coordinator.submit(request_id, request).
- Observe leaked keys in
_requests / _completion_futures.
Expected
On any submit failure, coordinator should fully rollback request bookkeeping.
Related PR