From e6e5fafc50786baafcb6bd612d9f154ca5a39c20 Mon Sep 17 00:00:00 2001 From: Sunil Pai Date: Thu, 5 May 2022 23:32:07 +0100 Subject: [PATCH] fix: fix isolate prewarm logic for `wrangler dev` When calling `wrangler dev`, we make a request to a special URL that "prewarms" the isolate running our Worker so that we can attach devtools etc to it before actually making a request. We'd implemented it wrongly, and because we'd silenced its errors, we weren't catching it. This patch fixes the logic (based on wrangler 1.x's implementation) and enables logging errors when the prewarm request fails. As a result, profiling starts working again as expected. Fixes https://github.com/cloudflare/wrangler2/issues/907 --- .changeset/eighty-islands-serve.md | 9 +++++++++ packages/wrangler/src/create-worker-preview.ts | 14 ++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 .changeset/eighty-islands-serve.md diff --git a/.changeset/eighty-islands-serve.md b/.changeset/eighty-islands-serve.md new file mode 100644 index 000000000000..06d3d4e8875f --- /dev/null +++ b/.changeset/eighty-islands-serve.md @@ -0,0 +1,9 @@ +--- +"wrangler": patch +--- + +fix: fix isolate prewarm logic for `wrangler dev` + +When calling `wrangler dev`, we make a request to a special URL that "prewarms" the isolate running our Worker so that we can attach devtools etc to it before actually making a request. We'd implemented it wrongly, and because we'd silenced its errors, we weren't catching it. This patch fixes the logic (based on wrangler 1.x's implementation) and enables logging errors when the prewarm request fails. + +As a result, profiling starts working again as expected. Fixes https://github.com/cloudflare/wrangler2/issues/907 diff --git a/packages/wrangler/src/create-worker-preview.ts b/packages/wrangler/src/create-worker-preview.ts index 677677b9ed0f..78add6dc4609 100644 --- a/packages/wrangler/src/create-worker-preview.ts +++ b/packages/wrangler/src/create-worker-preview.ts @@ -2,6 +2,7 @@ import { URL } from "node:url"; import { fetch } from "undici"; import { fetchResult } from "./cfetch"; import { createWorkerUploadForm } from "./create-worker-upload-form"; +import { logger } from "./logger"; import type { CfAccount, CfWorkerContext, CfWorkerInit } from "./worker"; /** @@ -66,9 +67,9 @@ async function sessionToken( : `/accounts/${accountId}/workers/subdomain/edge-preview`; const { exchange_url } = await fetchResult<{ exchange_url: string }>(initUrl); - const { inspector_websocket, token } = (await ( + const { inspector_websocket, prewarm, token } = (await ( await fetch(exchange_url, { signal: abortSignal }) - ).json()) as { inspector_websocket: string; token: string }; + ).json()) as { inspector_websocket: string; token: string; prewarm: string }; const { host } = new URL(inspector_websocket); const query = `cf_workers_preview_token=${token}`; @@ -76,9 +77,7 @@ async function sessionToken( value: token, host, inspectorUrl: new URL(`${inspector_websocket}?${query}`), - prewarmUrl: new URL( - `https://${host}/cdn-cgi/workers/preview/prewarm?${query}` - ), + prewarmUrl: new URL(prewarm), }; } @@ -165,9 +164,12 @@ export async function createWorkerPreview( const response = await fetch(token.prewarmUrl.href, { method: "POST", signal: abortSignal, + headers: { + "cf-workers-preview-token": token.value, + }, }); if (!response.ok) { - // console.error("worker failed to prewarm: ", response.statusText); + logger.warn("worker failed to prewarm: ", response.statusText); } return token; }