docs: combined concurrency limits and queue gates - #4853
Conversation
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Included review availability: Your plan provides up to 10 included reviews per hour; 3 remain after this review. 📜 Recent review details⏰ Context from checks skipped due to timeout. (3)
WalkthroughThe OpenAPI specification adds combined concurrency override and reset endpoints. It documents combined concurrency state on Merge Risk: ⚪ Minimal · up to This change documents combined queue concurrency APIs, configuration, and usage patterns. No current merge-blocking risk is identified. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Description checkExplanation The description accurately summarizes the documentation changes, but it does not follow the repository template. It omits the required checklist, testing details, changelog, screenshots section, and issue-closing line. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
05bef1a to
7998d68
Compare
af1ed4f to
ab4c607
Compare
e73840d to
34b2cfb
Compare
@trigger.dev/build
trigger.dev
@trigger.dev/core
@trigger.dev/python
@trigger.dev/react-hooks
@trigger.dev/redis-worker
@trigger.dev/rsc
@trigger.dev/schema-to-json
@trigger.dev/sdk
commit: |
34b2cfb to
947879a
Compare
947879a to
2e0ae55
Compare
2e0ae55 to
1772166
Compare
99fc054 to
7cd93f1
Compare
7cd93f1 to
2250f8e
Compare
2250f8e to
b70f42a
Compare
b70f42a to
b4d89eb
Compare
b4d89eb to
56a9526
Compare
56a9526 to
eb33462
Compare
eb33462 to
d1e4a7c
Compare
d1e4a7c to
e07558e
Compare
| Pass an array as `queue`: the first entry is the home queue, the rest name gates. The same array form works when you trigger, replacing the task's gates for that run: | ||
|
|
||
| ```ts | ||
| import { processWebhook } from "~/trigger/webhooks"; | ||
|
|
||
| await processWebhook.trigger(payload, { | ||
| queue: ["webhooks", "tenant"], | ||
| concurrencyKey: tenantId, | ||
| }); |
There was a problem hiding this comment.
🟡 Queue gate examples cannot compile
Passing an array through queue fails because task definitions and triggers accept only one queue. Users cannot implement any documented gate pattern.
Prompt for agents
Rewrite the “Using multiple queues at once” section in docs/queue-concurrency.mdx around the current public concurrency API. Task queue accepts only a string or queue object, and trigger-time queue accepts only a string. Multiple shared limits use concurrencyLimit({ name, perKey?, total? }) and the task concurrency array. Trigger-time overrides use the trigger option concurrency with one or two named limit strings. Update every gate example and the home-queue/gate terminology to match these APIs.
Was this helpful? React with 👍 or 👎 to provide feedback.
| export const perUserQueue = queue({ | ||
| name: "per-user-queue", | ||
| //each user runs at most 1 at a time... | ||
| concurrencyLimit: 1, | ||
| //...and at most 10 total runs across all users | ||
| combinedConcurrencyLimit: 10, | ||
| }); |
There was a problem hiding this comment.
🟡 Combined limit examples cannot compile
Passing combinedConcurrencyLimit to queue() fails because public queue options do not define it. Users cannot create either documented combined-limit configuration.
Prompt for agents
Replace the legacy combinedConcurrencyLimit queue examples and semantics in docs/queue-concurrency.mdx with the current public concurrency API. For a task-wide cap, use task({ concurrency: { perKey, total } }). For a shared cap, declare concurrencyLimit({ name, perKey?, total? }) and reference it from each task’s concurrency option. Ensure the text reflects that total caps all runs, including runs without concurrencyKey, as documented by the current types.
Was this helpful? React with 👍 or 👎 to provide feedback.
| ```ts | ||
| import { queues } from "@trigger.dev/sdk"; | ||
|
|
||
| // Allow up to 100 runs across all concurrency keys | ||
| await queues.overrideCombinedConcurrencyLimit("queue_1234", 100); | ||
|
|
||
| // Revert to the combinedConcurrencyLimit declared in your code | ||
| await queues.resetCombinedConcurrencyLimit("queue_1234"); |
There was a problem hiding this comment.
🟡 Combined override samples cannot compile
The queues namespace exports neither documented combined-limit method. Every new SDK sample fails before it can call the available HTTP endpoints.
Prompt for agents
Align the combined override/reset documentation with the SDK currently shipped on this branch. Either implement and export overrideCombinedConcurrencyLimit and resetCombinedConcurrencyLimit through packages/core and packages/trigger-sdk, or remove the SDK calls from docs/queue-concurrency.mdx and the x-codeSamples for both new OpenAPI operations and document direct HTTP usage instead. Keep the guide and generated management reference consistent.
Was this helpful? React with 👍 or 👎 to provide feedback.
| combined: | ||
| type: object | ||
| description: | | ||
| The combined concurrency cap across all `concurrencyKey` values of the queue. | ||
| Servers on this version always emit it, with `current` null when the queue | ||
| has no combined limit; older servers may omit the field entirely, so check | ||
| `combined?.current != null` rather than relying on its presence. | ||
| properties: | ||
| current: | ||
| type: integer | ||
| nullable: true | ||
| description: The current combined concurrency limit as declared or overridden (null = no cap). Enforcement clamps it to the environment concurrency limit at admit time. | ||
| example: 10 | ||
| base: | ||
| type: integer | ||
| nullable: true | ||
| description: The declared combined limit an override reverts to on reset | ||
| example: 10 | ||
| override: | ||
| type: integer | ||
| nullable: true | ||
| description: The overridden combined limit, when an override is active | ||
| example: null | ||
| overriddenAt: | ||
| type: string | ||
| format: date-time | ||
| nullable: true | ||
| description: When the combined override was applied | ||
| running: | ||
| type: integer | ||
| nullable: true | ||
| description: Runs currently in flight across all concurrencyKey values | ||
| example: 4 |
…body required The gates intro promised a task-wide cap the keyed example does not deliver (a concurrencyKey splits the home queue per key); the combined object is emitted on every queue with null fields rather than omitted; and both reset endpoints reject a zero-length body, so the body is required. Also restores the example that drifted off overriddenAt.
A Use cases index links each goal to its section, the multi-queue section names the home queue and gate concepts once and gives each pattern its own worked example (per-tenant cap across tasks, global cap for a shared resource via a combined-only queue, pinned-key shared pool), and the per-key-except-combined rule gets a warning callout. Folds in the simplified wording and removes self-hosting notes.
The combined limit only counts keyed runs, so the shared-resource example now shows the keyed trigger and warns that keyless runs bypass the cap, pointing those cases at the pinned-key pool.
e07558e to
7038e96
Compare
Summary
Documents the queue concurrency features shipping in this stack: the
combinedConcurrencyLimitqueue option that caps a keyed queue across all of itsconcurrencyKeyvalues, queue gates (arrayqueuesyntax for holding a slot in more than one queue), and the combined override/reset SDK methods and endpoints.The concurrency guide gains sections on combined limits and gates with self-hosting notes for the server flags, the OpenAPI spec gains the two combined endpoints and the
concurrency.combinedresponse field, and the management reference gains pages for both new endpoints.Stacked on #4830.