mirror of
https://github.com/coder/coder.git
synced 2026-06-03 21:18:24 +00:00
a33ca95df2
Fixes https://github.com/coder/internal/issues/1371 ## Problem `TestCloseDuringShutdownContextCanceledShouldRetryOnNewReplica` flakes intermittently in CI. The observed failure is that the chat never reaches `pending` status after `serverA.Close()`. ## Root cause Race between context cancellation and the mock OpenAI server's stream completion marker. When `Close()` cancels the server context, the in-flight HTTP streaming request is canceled. The mock server's handler detects this via `req.Context().Done()` and closes its chunks channel. The mock's `writeChatCompletionsStreaming` then writes `data: [DONE]` — the SSE completion marker. On a loopback connection, this marker can reach the client **before** the client's HTTP transport honors the context cancellation. When this happens: 1. The client sees a successful stream completion (not an error) 2. `chatloop.Run` returns `nil` 3. `processChat` falls through without error → status stays `waiting` (the default) 4. The test expects `pending` → **flake** ## Fix Skip writing the `[DONE]` marker when the request context is already canceled, in both `writeChatCompletionsStreaming` and `writeResponsesAPIStreaming`.