History

Log whether the warmup runs and whether warm isolates still pay for Start (#1687)

Rhys Sullivan committed 2 months ago

Commit 1b2509c1 parent 46625d21 file · +36 −2Browse files

Unified · Split

apps/cloud/src/server.ts+36−2
@@ -103,12 +103,36 @@ export { McpExecutionOwnerDirectoryDO } from "@executor-js/cloudflare/mcp/execut · 102 unmodified lines
103// until the in-flight export resolves.103// until the in-flight export resolves.
104// ---------------------------------------------------------------------------104// ---------------------------------------------------------------------------
105 105
106const fetchHandler = handler.fetch as (106const rawFetchHandler = handler.fetch as (
107 request: Request,107 request: Request,
108 env: Env,108 env: Env,
109 ctx: ExecutionContext,109 ctx: ExecutionContext,
110) => Response | Promise<Response>;110) => Response | Promise<Response>;
111 111
112// TEMPORARY: does an isolate that already warmed still pay for Start?
113let startEverHandled = false;
114const fetchHandler = async (
115 request: Request,
116 env: Env,
117 ctx: ExecutionContext,
118): Promise<Response> => {
119 const wasWarm = startEverHandled;
120 startEverHandled = true;
121 await scheduler.wait(0);
122 const startedAt = Date.now();
123 const response = await rawFetchHandler(request, env, ctx);
124 await scheduler.wait(0);
125 console.log(
126 JSON.stringify({
127 probe: "start",
128 path: new URL(request.url).pathname,
129 wasWarm,
130 ms: Date.now() - startedAt,
131 }),
132 );
133 return response;
134};
135
112const tracer = trace.getTracer("executor-cloud-worker");136const tracer = trace.getTracer("executor-cloud-worker");
113 137
114const traceparentValueFor = (spanContext: SpanContext): string =>138const traceparentValueFor = (spanContext: SpanContext): string =>
@@ -220,6 +244,7 @@ const warmStartGraph = (env: Env, ctx: ExecutionContext): void => { · 105 unmodified lines
220 244
221 ctx.waitUntil(245 ctx.waitUntil(
222 (async () => {246 (async () => {
247 const startedAt = Date.now();
223 // oxlint-disable-next-line executor/no-try-catch-or-throw -- adapter boundary; a warmup failure must never affect the request that triggered it248 // oxlint-disable-next-line executor/no-try-catch-or-throw -- adapter boundary; a warmup failure must never affect the request that triggered it
224 try {249 try {
225 await fetchHandler(250 await fetchHandler(
@@ -227,9 +252,18 @@ const warmStartGraph = (env: Env, ctx: ExecutionContext): void => { · 1 unmodified line
227 env,252 env,
228 ctx,253 ctx,
229 );254 );
230 } catch {255 console.log(JSON.stringify({ probe: "warm", ok: true, ms: Date.now() - startedAt }));
256 } catch (err) {
231 // Advisory only — the request path still loads the graph lazily.257 // Advisory only — the request path still loads the graph lazily.
232 startGraphWarmupStarted = false;258 startGraphWarmupStarted = false;
259 console.log(
260 JSON.stringify({
261 probe: "warm",
262 ok: false,
263 ms: Date.now() - startedAt,
264 err: String(err),
265 }),
266 );
233 }267 }
234 })(),268 })(),
235 );269 );