From 38b4f0d1ae482aa26b2499e6f872ee161da0bae3 Mon Sep 17 00:00:00 2001 From: Danny Kopping Date: Mon, 5 May 2025 14:40:18 +0200 Subject: [PATCH] fix: use http client without timeout like we do in connectRPCVersion Signed-off-by: Danny Kopping --- codersdk/agentsdk/agentsdk.go | 36 +++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/codersdk/agentsdk/agentsdk.go b/codersdk/agentsdk/agentsdk.go index 73284de2581f0..d7eae52cec96d 100644 --- a/codersdk/agentsdk/agentsdk.go +++ b/codersdk/agentsdk/agentsdk.go @@ -710,18 +710,30 @@ func PrebuildClaimedChannel(id uuid.UUID) string { // - ping: ignored, keepalive // - prebuild claimed: a prebuilt workspace is claimed, so the agent must reinitialize. func (c *Client) WaitForReinit(ctx context.Context) (*ReinitializationEvent, error) { - // TODO: allow configuring httpclient - c.SDK.HTTPClient.Timeout = time.Hour * 24 - - // TODO (sasswart): tried the following to fix the above, it won't work. The shorter timeout wins. - // I also considered cloning c.SDK.HTTPClient and setting the timeout on the cloned client. - // That won't work because we can't pass the cloned HTTPClient into s.SDK.Request. - // Looks like we're going to need a separate client to be able to have a longer timeout. - // - // timeoutCtx, cancelTimeoutCtx := context.WithTimeout(ctx, 24*time.Hour) - // defer cancelTimeoutCtx() - - res, err := c.SDK.Request(ctx, http.MethodGet, "/api/v2/workspaceagents/me/reinit", nil) + rpcURL, err := c.SDK.URL.Parse("/api/v2/workspaceagents/me/reinit") + if err != nil { + return nil, xerrors.Errorf("parse url: %w", err) + } + + jar, err := cookiejar.New(nil) + if err != nil { + return nil, xerrors.Errorf("create cookie jar: %w", err) + } + jar.SetCookies(rpcURL, []*http.Cookie{{ + Name: codersdk.SessionTokenCookie, + Value: c.SDK.SessionToken(), + }}) + httpClient := &http.Client{ + Jar: jar, + Transport: c.SDK.HTTPClient.Transport, + } + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, rpcURL.String(), nil) + if err != nil { + return nil, xerrors.Errorf("build request: %w", err) + } + + res, err := httpClient.Do(req) if err != nil { return nil, xerrors.Errorf("execute request: %w", err) }