chamber: bound RPC calls with a hard wall-clock deadline Verified
Channels were created with :timeout nil, so ag-grpc applied no default per-call timeout. ag-grpc's own per-call deadline (when one is set) only wraps the receive path in call-unary — ensure-connected runs outside it — so a wedge during TCP/TLS handshake or anywhere in the gRPC stack would block the Hunchentoot worker indefinitely. The chamber-or fallback never got a chance to fire, and worker threads piled up until the server stopped serving any git-reading route. Add :chamber-rpc-timeout (default 10s), use it as the channel default timeout, and wrap chamber-call in bt2:with-timeout as a preemptive hard deadline. On timeout, close + drop the cached channel so the next call rebuilds it instead of reusing a half-open one. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By:
Claude Opus 4.7 (1M context) <noreply@anthropic.com>