# @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`