mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: stop reading closed channel for /watch devcontainers endpoint (#19373)
Fixes https://github.com/coder/coder/issues/19372 We increase the read limit to 4MiB (we use this limit elsewhere). We also make sure to stop sending messages when `containersCh` becomes closed.
This commit is contained in:
@@ -400,6 +400,10 @@ func (c *AgentConn) WatchContainers(ctx context.Context, logger slog.Logger) (<-
|
||||
|
||||
conn, res, err := websocket.Dial(ctx, url, &websocket.DialOptions{
|
||||
HTTPClient: c.apiClient(),
|
||||
|
||||
// We want `NoContextTakeover` compression to balance improving
|
||||
// bandwidth cost/latency with minimal memory usage overhead.
|
||||
CompressionMode: websocket.CompressionNoContextTakeover,
|
||||
})
|
||||
if err != nil {
|
||||
if res == nil {
|
||||
@@ -411,6 +415,12 @@ func (c *AgentConn) WatchContainers(ctx context.Context, logger slog.Logger) (<-
|
||||
defer res.Body.Close()
|
||||
}
|
||||
|
||||
// When a workspace has a few devcontainers running, or a single devcontainer
|
||||
// has a large amount of apps, then each payload can easily exceed 32KiB.
|
||||
// We up the limit to 4MiB to give us plenty of headroom for workspaces that
|
||||
// have lots of dev containers with lots of apps.
|
||||
conn.SetReadLimit(1 << 22) // 4MiB
|
||||
|
||||
d := wsjson.NewDecoder[codersdk.WorkspaceAgentListContainersResponse](conn, websocket.MessageText, logger)
|
||||
return d.Chan(), d, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user