P1-03: No ensemble-level timeout — provider hang blocks HTTP request forever #9
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Severity: P1 (High)
File:
decider/ensemble.pyline 60Problem
The ensemble uses
ThreadPoolExecutorwithout any timeout:If all providers hang (network partition, API outage, dead connection), the entire ensemble thread blocks forever → HTTP request handler blocks forever → worker thread leaked. With
ThreadingHTTPServer, this means ALL workers can be consumed by hanging requests, causing a complete denial of service.Fix
Ensemble.decide()as_completed(futures, timeout=)orfuture.result(timeout=)server.decision_timeout)ask_user