diff --git a/.changeset/deprecate-queue-delivery-delay.md b/.changeset/deprecate-queue-delivery-delay.md new file mode 100644 index 000000000000..8fd6226a3fdc --- /dev/null +++ b/.changeset/deprecate-queue-delivery-delay.md @@ -0,0 +1,11 @@ +--- +"wrangler": patch +"@cloudflare/workers-utils": patch +--- + +Add deprecation warning for `delivery_delay` in queue producer bindings + +The `delivery_delay` setting in `[[queues.producers]]` was silently having no effect since 2024. +This change adds a deprecation warning when the setting is used, informing users that queue-level +settings should be configured using `wrangler queues update` instead. The setting will be removed +in a future version. diff --git a/packages/workers-utils/src/config/validation.ts b/packages/workers-utils/src/config/validation.ts index 5bba1b1c505b..17d3e00e8438 100644 --- a/packages/workers-utils/src/config/validation.ts +++ b/packages/workers-utils/src/config/validation.ts @@ -3527,6 +3527,18 @@ const validateQueueBinding: ValidatorFn = (diagnostics, field, value) => { } } + // Warn if delivery_delay is set, as it is deprecated and has no effect + if ( + hasProperty(value, "delivery_delay") && + value.delivery_delay !== undefined + ) { + diagnostics.warnings.push( + `The "delivery_delay" field in "${field}" is deprecated and has no effect. ` + + `Queue-level settings should be configured using "wrangler queues update" instead. ` + + `This setting will be removed in a future version.` + ); + } + if (!isRemoteValid(value, field, diagnostics)) { isValid = false; } diff --git a/packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts b/packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts index 68ee6e858b95..8c772af7f210 100644 --- a/packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts +++ b/packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts @@ -3334,6 +3334,37 @@ describe("normalizeAndValidateConfig()", () => { - \\"queues.consumers[3]\\" should, optionally, have a number \\"max_concurrency\\" field but got {\\"queue\\":\\"myQueue\\",\\"max_batch_size\\":\\"3\\",\\"max_batch_timeout\\":null,\\"max_retries\\":\\"hello\\",\\"dead_letter_queue\\":5,\\"max_concurrency\\":\\"hello\\"}." `); }); + + it("should warn if delivery_delay is set on a queue producer", () => { + const { config, diagnostics } = normalizeAndValidateConfig( + { + queues: { + producers: [ + { binding: "QUEUE_BINDING_1", queue: "queue1" }, + { + binding: "QUEUE_BINDING_2", + queue: "queue2", + delivery_delay: 60, + }, + ], + }, + } as unknown as RawConfig, + undefined, + undefined, + { env: undefined } + ); + + expect(config.queues.producers).toHaveLength(2); + expect(config.queues.producers?.[1]).toMatchObject({ + delivery_delay: 60, + }); + expect(diagnostics.hasErrors()).toBe(false); + expect(diagnostics.hasWarnings()).toBe(true); + expect(diagnostics.renderWarnings()).toMatchInlineSnapshot(` + "Processing wrangler configuration: + - The \\"delivery_delay\\" field in \\"queues.producers[1]\\" is deprecated and has no effect. Queue-level settings should be configured using \\"wrangler queues update\\" instead. This setting will be removed in a future version." + `); + }); }); describe("[r2_buckets]", () => {