Skip to content

Commit d4f2daf

Browse files
devin-ai-integration[bot]penalosaemily-shen
authored
Fix duplicate warning messages in wrangler dev (#10913)
* Fix duplicate warning messages in wrangler dev Changed all logger.warn() calls to logger.once.warn() in ConfigController.ts to prevent duplicate warnings during config updates or state transitions. Fixes #6855 Co-Authored-By: smacleod@cloudflare.com <smacleod@cloudflare.com> * Add logger.clearHistory() for test isolation in containers tests Co-Authored-By: smacleod@cloudflare.com <smacleod@cloudflare.com> * Address PR feedback: add comment and use Analytics Engine test Co-Authored-By: smacleod@cloudflare.com <smacleod@cloudflare.com> * fix rebase error --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: smacleod@cloudflare.com <smacleod@cloudflare.com> Co-authored-by: emily-shen <eshen@cloudflare.com>
1 parent 7f7ec7f commit d4f2daf

File tree

4 files changed

+71
-6
lines changed

4 files changed

+71
-6
lines changed

.changeset/tasty-moose-matter.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"wrangler": patch
3+
---
4+
5+
Fixed duplicate warning messages appearing during wrangler dev when configuration changes or state transitions occur

packages/wrangler/src/__tests__/api/startDevWorker/ConfigController.test.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,4 +267,51 @@ describe("ConfigController", () => {
267267
},
268268
});
269269
});
270+
271+
it("should only log warnings once even with multiple config updates", async () => {
272+
await seed({
273+
"src/index.js": dedent/* javascript */ `
274+
addEventListener('fetch', event => {
275+
event.respondWith(new Response('hello world'))
276+
})
277+
`,
278+
"wrangler.toml": dedent/* toml */ `
279+
name = "my-worker"
280+
main = "src/index.js"
281+
compatibility_date = "2024-06-01"
282+
283+
[[analytics_engine_datasets]]
284+
binding = "ANALYTICS"
285+
dataset = "analytics_dataset"
286+
`,
287+
});
288+
289+
const event1 = waitForConfigUpdate(controller);
290+
await controller.set({
291+
config: "./wrangler.toml",
292+
});
293+
await event1;
294+
295+
const event2 = waitForConfigUpdate(controller);
296+
await controller.patch({
297+
dev: { liveReload: true },
298+
});
299+
await event2;
300+
301+
const event3 = waitForConfigUpdate(controller);
302+
await controller.patch({
303+
dev: { server: { port: 8787 } },
304+
});
305+
await event3;
306+
307+
const warningCount = std.warn
308+
.split("\n")
309+
.filter((line) =>
310+
line.includes(
311+
"Analytics Engine is not supported locally when using the service-worker format"
312+
)
313+
).length;
314+
315+
expect(warningCount).toBe(1);
316+
});
270317
});

packages/wrangler/src/__tests__/dev.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { getWorkerAccountAndContext } from "../dev/remote";
1010
import { COMPLIANCE_REGION_CONFIG_UNKNOWN } from "../environment-variables/misc-variables";
1111
import { FatalError } from "../errors";
1212
import { CI } from "../is-ci";
13+
import { logger } from "../logger";
1314
import { sniffUserAgent } from "../package-manager";
1415
import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
1516
import { mockConsoleMethods } from "./helpers/mock-console";
@@ -2110,6 +2111,14 @@ describe.sequential("wrangler dev", () => {
21102111
});
21112112

21122113
describe("containers", () => {
2114+
beforeEach(() => {
2115+
// Clear logger.once history between tests to ensure test isolation.
2116+
// Without this, warnings logged via logger.once.warn() in one test
2117+
// would be suppressed in subsequent tests since they track logged
2118+
// messages globally across the test process.
2119+
logger.clearHistory();
2120+
});
2121+
21132122
const containerConfig = {
21142123
main: "index.js",
21152124
compatibility_date: "2024-01-01",

packages/wrangler/src/api/startDevWorker/ConfigController.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ async function resolveConfig(
389389
!resolved.dev.remote &&
390390
resolved.build.format === "service-worker"
391391
) {
392-
logger.warn(
392+
logger.once.warn(
393393
"Analytics Engine is not supported locally when using the service-worker format. Please migrate to the module worker format: https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/"
394394
);
395395
}
@@ -398,7 +398,7 @@ async function resolveConfig(
398398

399399
const services = extractBindingsOfType("service", resolved.bindings);
400400
if (services && services.length > 0 && resolved.dev?.remote) {
401-
logger.warn(
401+
logger.once.warn(
402402
`This worker is bound to live services: ${services
403403
.map(
404404
(service) =>
@@ -411,7 +411,7 @@ async function resolveConfig(
411411
}
412412

413413
if (!resolved.dev?.origin?.secure && resolved.dev?.remote) {
414-
logger.warn(
414+
logger.once.warn(
415415
"Setting upstream-protocol to http is not currently supported for remote mode.\n" +
416416
"If this is required in your project, please add your use case to the following issue:\n" +
417417
"https://github.com/cloudflare/workers-sdk/issues/583."
@@ -435,7 +435,9 @@ async function resolveConfig(
435435
(queues?.length ||
436436
resolved.triggers?.some((t) => t.type === "queue-consumer"))
437437
) {
438-
logger.warn("Queues are not yet supported in wrangler dev remote mode.");
438+
logger.once.warn(
439+
"Queues are not yet supported in wrangler dev remote mode."
440+
);
439441
}
440442

441443
if (resolved.dev.remote) {
@@ -446,7 +448,7 @@ async function resolveConfig(
446448
resolved.containers &&
447449
resolved.containers.length > 0
448450
) {
449-
logger.warn(
451+
logger.once.warn(
450452
"Containers are only supported in local mode, to suppress this warning set `dev.enable_containers` to `false` or pass `--enable-containers=false` to the `wrangler dev` command"
451453
);
452454
}
@@ -459,7 +461,9 @@ async function resolveConfig(
459461
resolved.dev.remote &&
460462
Array.from(classNamesWhichUseSQLite.values()).some((v) => v)
461463
) {
462-
logger.warn("SQLite in Durable Objects is only supported in local mode.");
464+
logger.once.warn(
465+
"SQLite in Durable Objects is only supported in local mode."
466+
);
463467
}
464468
}
465469

0 commit comments

Comments
 (0)