fix(downloads): 单个停机会永久导致作业失败,绕过尝试次数: 10

作者: chriscrosstalk创建于 2026年8月3日更新于 2026年9月13日
标签released on @rc

□ 问题

单站永久失败下载, 绕过重试策略 。

`RunDloadJob'登记在:

尝试: 10, 后置: { 类型: '责任', 延迟: 30000},


但是在代码库的任何地方都没有“最大StallCount”或“lockDuration”的覆盖**(“最大stallCountation ”) 。 BullMQ的默认“最大总数:1”因此适用,一个被搁置的工作完全失败了,而不是费尽了努力。 这十种尝试从未出现.

观测到v1.34.0-rc.4:

[负载] 任务失败: d395a22f5112af46, 错误: 任务停滞超过允许限制 [ZimService] 维基百科下载失败:wikipedia en all mini 2026-06.zim


工人死后没有续锁 - > BullMQ 标出工作停滞 - > ' 最大StallCount: 1 ' 永久失效。 用户看到一个失败的下载,其中包含一个无法解释任何可操作的信息.

□ 为什么这很重要 超越手动重启

显而易见的触发器是容器重启中下行负荷,这听起来像只涉及操作员的问题. 这不是:

** 侧车更新器重新创建了管理员容器。 ** 自动更新,当用户通过多小时下载而半途着陆时,工人就会死亡,并永远无法工作。 自动更新在1.33中运出,所以这个组合今天是直播. 关注这一类互动是有先例的——PR #146在下载运行时阻止了Kiwix重启.

Vikipedia Contract为 12.5 GB,全构为124 GB,因此在飞行中下载的窗口以小时而不是秒来测量.

□ 相关

#1201登陆后,部分".tmp"存活下来,再起回放的下载恢复而非重启,这大大软化了破坏. 但是这个工作仍然需要重新来过**由手**,因为它处于一个终端失败状态,而不是自己重新尝试.

试验时也值得注意:从摊位恢复不是瞬间. 重拾被搁置的工作需要大约4分钟的观察时间,因此下载可以看起来冷冻后才能收起.

□ 可能的方向

这并不明显,这是正确的,因此是一个问题而不是公关:

1. **在下载队列上播放`maxStalledCount',这样一站会占用尝试而不是结束工作。 最简单,而且使`尝试:10'意指看起来的含义。
2. ** 通知`锁定期限',这样,一个被短暂封锁的工人就不会被宣布停滞。 治取别因.
3. **在下载活动时,让更新器推迟**,为Kiwix反映PR #146的方法. 专门处理自动更新路径, 但不处理网络造成的摊位 。

(1)+(3)看起来是实际上关闭了用户可见孔口的组合,但重试语义应该有一个深思熟虑的选择,而不是一个快的旗帜翻转.

发现于v1.34.0-rc.4 QA. 不是1.34.0阻塞器 - 存档 1.35分级.

内容来源: Crosstalk-Solutions/project-nomad