Files
2026-07-13 13:32:57 +08:00

488 lines
15 KiB
Markdown

# @trigger.dev/redis-worker
## 4.5.3
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.5.3`
## 4.5.2
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.5.2`
## 4.5.1
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.5.1`
## 4.5.0
### Patch Changes
- Pipeline the per-entry `HGETALL` fetches in `MollifierBuffer.listEntriesForEnv`. The previous serial implementation issued one Redis round-trip per runId returned by `LRANGE`, which dominated stale-sweep wall-time at any meaningful backlog (at the sweep's default maxCount=1000, this is ~1000 RTTs per env per pass). Behaviour is unchanged — entries are still skipped when the entry hash has been torn down by a concurrent drainer ack/fail between the LRANGE and the HGETALL. ([#3752](https://github.com/triggerdotdev/trigger.dev/pull/3752))
- Make mollifier buffer and drainer internals configurable. `MollifierBuffer` now accepts `ackGraceTtlSeconds`, `maxRetriesPerRequest`, `reconnectStepMs`, and `reconnectMaxMs` options, and `MollifierDrainer` accepts `maxBackoffMs` and `backoffFloorMs`. All default to their previous hardcoded values, so existing behaviour is unchanged. ([#3822](https://github.com/triggerdotdev/trigger.dev/pull/3822))
- `MollifierDrainer` accepts a `drainBatchSize` option (default 1) that controls how many entries are popped per env per tick — in-flight handlers remain capped by the global `concurrency`. `MollifierBuffer` also gains `getDrainingCount()` / `listStaleDraining()`, backed by a new `mollifier:draining` ZSET maintained atomically with pop/ack/fail/requeue (observability-only). ([#3797](https://github.com/triggerdotdev/trigger.dev/pull/3797))
- Add MollifierBuffer and MollifierDrainer primitives for trigger burst smoothing. ([#3614](https://github.com/triggerdotdev/trigger.dev/pull/3614))
MollifierBuffer (`accept`, `pop`, `ack`, `requeue`, `fail`, `evaluateTrip`) is a per-env FIFO over Redis with atomic Lua transitions for status tracking. `evaluateTrip` is a sliding-window trip evaluator the webapp gate uses to detect per-env trigger bursts.
MollifierDrainer pops entries through a polling loop with a user-supplied handler. The loop survives transient Redis errors via capped exponential backoff (up to 5s), and per-env pop failures don't poison the rest of the batch — one env's blip is logged and counted as failed for that tick. Rotation is two-level: orgs at the top, envs within each org. The buffer maintains `mollifier:orgs` and `mollifier:org-envs:${orgId}` atomically with per-env queues, so the drainer walks orgs → envs directly without an in-memory cache. The `maxOrgsPerTick` option (default 500) caps how many orgs are scheduled per tick; for each picked org, one env is popped (rotating round-robin within the org). An org with N envs gets the same per-tick scheduling slot as an org with 1 env, so tenant-level drainage throughput is determined by org count rather than env count.
- Mollifier `mutateSnapshot` now enforces a tag cap: an `append_tags` patch carrying `maxTags` returns `"limit_exceeded"` (writing nothing) when the deduped tag count would exceed the limit, so a buffered run can't accumulate more tags via the tags API than the trigger validator allows at creation. ([#3756](https://github.com/triggerdotdev/trigger.dev/pull/3756))
- Add a `redis_worker.queue.oldest_message_age` observable gauge (unit `ms`, labeled `worker_name`) reporting the age of the oldest overdue message in each queue. This is a generic queue-stall signal: it stays at 0 while a queue drains healthily and rises only when due work sits undrained (e.g. a blocked dequeue, a dead consumer, or backpressure), even when no items are being processed. Orphaned queue entries are resolved against the items hash so they don't report a phantom stall. Also exposes `SimpleQueue.oldestMessageAge()`. ([#4086](https://github.com/triggerdotdev/trigger.dev/pull/4086))
- Updated dependencies:
- `@trigger.dev/core@4.5.0`
## 4.5.0-rc.7
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.5.0-rc.7`
## 4.5.0-rc.6
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.5.0-rc.6`
## 4.5.0-rc.5
### Patch Changes
- Make mollifier buffer and drainer internals configurable. `MollifierBuffer` now accepts `ackGraceTtlSeconds`, `maxRetriesPerRequest`, `reconnectStepMs`, and `reconnectMaxMs` options, and `MollifierDrainer` accepts `maxBackoffMs` and `backoffFloorMs`. All default to their previous hardcoded values, so existing behaviour is unchanged. ([#3822](https://github.com/triggerdotdev/trigger.dev/pull/3822))
- `MollifierDrainer` accepts a `drainBatchSize` option (default 1) that controls how many entries are popped per env per tick — in-flight handlers remain capped by the global `concurrency`. `MollifierBuffer` also gains `getDrainingCount()` / `listStaleDraining()`, backed by a new `mollifier:draining` ZSET maintained atomically with pop/ack/fail/requeue (observability-only). ([#3797](https://github.com/triggerdotdev/trigger.dev/pull/3797))
- Updated dependencies:
- `@trigger.dev/core@4.5.0-rc.5`
## 4.5.0-rc.4
### Minor Changes
- Mollifier buffer extensions: idempotency dedup, an atomic `mutateSnapshot` API, metadata CAS, claim primitives, and a `MollifierSnapshot` type. The buffer's Redis client now reconnects with jittered backoff so a fleet of clients doesn't stampede Redis in lockstep after a blip. ([#3752](https://github.com/triggerdotdev/trigger.dev/pull/3752))
- Add `onTerminalFailure` callback to `MollifierDrainerOptions` so the customer's run lands a SYSTEM_FAILURE PG row even when the drainer exhausts `maxAttempts` on a retryable PG error. Previously, retryable-error exhaustion called `buffer.fail()` directly, which atomically marks FAILED + DELs the entry hash with no PG write — silent data loss when PG was unreachable across the full retry budget. The callback fires before `buffer.fail()` on any terminal path (`cause: "non-retryable"` or `"max-attempts-exhausted"`); throwing a retryable error from the callback causes the drainer to requeue rather than fail. ([#3754](https://github.com/triggerdotdev/trigger.dev/pull/3754))
### Patch Changes
- Pipeline the per-entry `HGETALL` fetches in `MollifierBuffer.listEntriesForEnv`. The previous serial implementation issued one Redis round-trip per runId returned by `LRANGE`, which dominated stale-sweep wall-time at any meaningful backlog (at the sweep's default maxCount=1000, this is ~1000 RTTs per env per pass). Behaviour is unchanged — entries are still skipped when the entry hash has been torn down by a concurrent drainer ack/fail between the LRANGE and the HGETALL. ([#3752](https://github.com/triggerdotdev/trigger.dev/pull/3752))
- Mollifier `mutateSnapshot` now enforces a tag cap: an `append_tags` patch carrying `maxTags` returns `"limit_exceeded"` (writing nothing) when the deduped tag count would exceed the limit, so a buffered run can't accumulate more tags via the tags API than the trigger validator allows at creation. ([#3756](https://github.com/triggerdotdev/trigger.dev/pull/3756))
- Updated dependencies:
- `@trigger.dev/core@4.5.0-rc.4`
## 4.5.0-rc.3
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.5.0-rc.3`
## 4.5.0-rc.2
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.5.0-rc.2`
## 4.5.0-rc.1
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.5.0-rc.1`
## 4.5.0-rc.0
### Patch Changes
- Add MollifierBuffer and MollifierDrainer primitives for trigger burst smoothing. ([#3614](https://github.com/triggerdotdev/trigger.dev/pull/3614))
MollifierBuffer (`accept`, `pop`, `ack`, `requeue`, `fail`, `evaluateTrip`) is a per-env FIFO over Redis with atomic Lua transitions for status tracking. `evaluateTrip` is a sliding-window trip evaluator the webapp gate uses to detect per-env trigger bursts.
MollifierDrainer pops entries through a polling loop with a user-supplied handler. The loop survives transient Redis errors via capped exponential backoff (up to 5s), and per-env pop failures don't poison the rest of the batch — one env's blip is logged and counted as failed for that tick. Rotation is two-level: orgs at the top, envs within each org. The buffer maintains `mollifier:orgs` and `mollifier:org-envs:${orgId}` atomically with per-env queues, so the drainer walks orgs → envs directly without an in-memory cache. The `maxOrgsPerTick` option (default 500) caps how many orgs are scheduled per tick; for each picked org, one env is popped (rotating round-robin within the org). An org with N envs gets the same per-tick scheduling slot as an org with 1 env, so tenant-level drainage throughput is determined by org count rather than env count.
- Updated dependencies:
- `@trigger.dev/core@4.5.0-rc.0`
## 4.4.6
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.4.6`
## 4.4.5
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.4.5`
## 4.4.4
### Patch Changes
- Adapted the CLI API client to propagate the trigger source via http headers. ([#3241](https://github.com/triggerdotdev/trigger.dev/pull/3241))
- Updated dependencies:
- `@trigger.dev/core@4.4.4`
## 4.4.3
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.4.3`
## 4.4.2
### Patch Changes
- Fix slow batch queue processing by removing spurious cooloff on concurrency blocks and fixing a race condition where retry attempt counts were not atomically updated during message re-queue. ([#3079](https://github.com/triggerdotdev/trigger.dev/pull/3079))
- Updated dependencies:
- `@trigger.dev/core@4.4.2`
## 4.4.1
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.4.1`
## 4.4.0
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.4.0`
## 4.3.3
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.3.3`
## 4.3.2
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.3.2`
## 4.3.1
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.3.1`
## 4.3.0
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.3.0`
## 4.2.0
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.2.0`
## 4.1.2
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.1.2`
## 4.1.1
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.1.1`
## 4.1.0
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.1.0`
## 4.0.7
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.7`
## 4.0.6
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.6`
## 4.0.5
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.5`
## 4.0.4
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.4`
## 4.0.3
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.3`
## 4.0.2
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.2`
## 4.0.1
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.1`
## 4.0.0
### Major Changes
- Trigger.dev v4 release. Please see our upgrade to v4 docs to view the full changelog: https://trigger.dev/docs/upgrade-to-v4 ([#1869](https://github.com/triggerdotdev/trigger.dev/pull/1869))
### Patch Changes
- Now each worker gets it's own pLimit concurrency limiter, and we will only ever dequeue items where there is concurrency capacity, preventing incorrectly retried jobs due to visibility timeout expiry ([#2235](https://github.com/triggerdotdev/trigger.dev/pull/2235))
- Updated dependencies:
- `@trigger.dev/core@4.0.0`
## 4.0.0-v4-beta.28
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.28`
## 4.0.0-v4-beta.27
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.27`
## 4.0.0-v4-beta.26
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.26`
## 4.0.0-v4-beta.25
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.25`
## 4.0.0-v4-beta.24
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.24`
## 4.0.0-v4-beta.23
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.23`
## 4.0.0-v4-beta.22
### Patch Changes
- Now each worker gets it's own pLimit concurrency limiter, and we will only ever dequeue items where there is concurrency capacity, preventing incorrectly retried jobs due to visibility timeout expiry ([#2235](https://github.com/triggerdotdev/trigger.dev/pull/2235))
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.22`
## 4.0.0-v4-beta.21
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.21`
## 4.0.0-v4-beta.20
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.20`
## 4.0.0-v4-beta.19
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.19`
## 4.0.0-v4-beta.18
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.18`
## 4.0.0-v4-beta.17
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.17`
## 4.0.0-v4-beta.16
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.16`
## 4.0.0-v4-beta.15
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.15`
## 4.0.0-v4-beta.14
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.14`
## 4.0.0-v4-beta.13
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.13`
## 4.0.0-v4-beta.12
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.12`
## 4.0.0-v4-beta.11
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.11`
## 4.0.0-v4-beta.10
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.10`
## 4.0.0-v4-beta.9
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.9`
## 4.0.0-v4-beta.8
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.8`
## 4.0.0-v4-beta.7
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.7`
## 4.0.0-v4-beta.6
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.6`
## 4.0.0-v4-beta.5
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.5`
## 4.0.0-v4-beta.4
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.4`
## 4.0.0-v4-beta.3
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.3`
## 4.0.0-v4-beta.2
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.2`
## 4.0.0-v4-beta.1
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.1`
## 4.0.0-v4-beta.0
### Major Changes
- Trigger.dev v4 release. Please see our upgrade to v4 docs to view the full changelog: https://trigger.dev/docs/upgrade-to-v4 ([#1869](https://github.com/triggerdotdev/trigger.dev/pull/1869))
### Patch Changes
- Updated dependencies:
- `@trigger.dev/core@4.0.0-v4-beta.0`