workflow-engine: step timeout over ~24.8 days (or Infinity) fires after 1ms
维护者通常 1 天内回复
评估
- 难度
- 2/5
- 预计耗时
- 1-3 小时
- 新手友好度
- 84/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- node.js, typescript
调研方向
从 rivetkit-typescript/packages/workflow-engine/src/context.ts 中的 executeWithTimeout 开始,然后阅读 utils.ts 中的 setLongTimeout 辅助函数,以及 index.ts 如何使用它。添加超过 2^31-1 ms 的 timeout 和 Infinity 的测试;当长 timeout 不再立即触发,且 Infinity 会禁用 timeout 时,即为完成。
由索引模型根据 Issue 内容生成。
描述
executeWithTimeout in rivetkit-typescript/packages/workflow-engine/src/context.ts uses a plain setTimeout(reject, timeoutMs). Node can't wait longer than 2^31-1 ms (~24.8 days) that way: anything bigger, including Infinity, is clamped to 1ms with a TimeoutOverflowWarning.
So a step like this fails right away with StepTimeoutError, even though it would finish fine:
await ctx.step({
name: "long-job",
timeout: Infinity, // or 30 * 24 * 60 * 60 * 1000
run: async () => { ... },
});
Repro with the same logic as executeWithTimeout, running a 200ms step:
- timeout 60_000 -> "done"
- timeout 2_592_000_000 (30 days) -> StepTimeoutError after 3ms
- timeout Infinity -> StepTimeoutError after 1ms
Since timeouts aren't retried by default, the step is marked exhausted and the workflow fails.
Expected: the step waits for the full timeout (and Infinity means no timeout).
Fix idea: use the setLongTimeout helper from utils.ts (already used for the scheduler wait in index.ts), and treat a non-finite timeout as disabled like 0. Happy to send a PR with tests.
- 主要语言
- Rust
- 星标
- 6.6k
- 派生
- 304
- 平均合并
- 19 小时 50 分钟
- 30 天内合并 PR
- 28
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
rivet-dev/rivet 的其他 Issue
-
难度 1/5 1-3 小时 新手友好度 66/100
rivet-dev/rivet#5971 · 1 条评论 ·
维护者通常 1 天内回复
-
rivetkit client: ActorConn debug log prints action arguments可能重新可做 关联的 PR 已关闭且未合并。 未关闭
难度 1/5 1 小时以内 新手友好度 80/100
rivet-dev/rivet#5955 · 4 条评论 ·
维护者通常 1 天内回复
-
effect: action on a missing actor instance fails as internal_error instead of actor.aborted可能已有人在做 @kunalgoesbyken 于 17 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 82/100
rivet-dev/rivet#5891 · 1 条评论 ·
维护者通常 1 天内回复
-
Rust client drops connection-level errors when actionId is null (JSON/CBOR)可能已有人在做 @DibbayajyotiRoy 于 39 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 78/100
rivet-dev/rivet#5819 · 1 条评论 ·
维护者通常 1 天内回复
-
Queue docs say completable messages are removed on receive, but they stay stored until complete()可能已有人在做 @Saisharathchandranandnetha 于 50 天前认领。 未关闭
难度 1/5 1-3 小时 新手友好度 91/100
rivet-dev/rivet#5762 · 1 条评论 ·
维护者通常 1 天内回复
相似的 Issue
-
SPLADE `/embed_sparse` output depends on the other inputs in the batch (candle BertModel / DistilBertModel)可能已有人在做 @0z5a 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
huggingface/text-embeddings-inference#979 ·
维护者通常 1 天内回复
-
good first issue help wanted
难度 2/5 1-3 小时 新手友好度 78/100
servo/rust-smallvec#874 ·
-
难度 1/5 1 小时以内 新手友好度 94/100
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 65/100
维护者通常 2 天内回复
-
ci enhancement need-triage
难度 2/5 1-3 小时 新手友好度 86/100
维护者通常 1 天内回复