在间隔溢出时,没有最大间隔的 ExponentialRetryPolicy 在 arm64 上返回了约 292 年的延迟时间
作者: harrisleesh创建于 2026年9月10日更新于 2026年9月10日
□到底想怎样?
使用退后. 新的责任追溯政策'(共同/退后/退后政策.go'中的退后'路径),且最大间隔被清除(NoInterval'),并依赖计算间隔过后停止的有记录的行为。
□ 描述错误
下一个Interval'被计算为活度64';用最大Interval = no Interval'和活度Interval'可以超过'MaxInt64'纳秒,而Go'将一个离地浮度64转换为'时间'。 期限`取决于平台:
- amd64:将负数包成正数,被
next Duration < p. firstInterval ' 检查并返回done'——匹配代码注释("如果下一次Interval溢出......”)。 - arm64:饱和于 " MaxInt64 " ,因此 " NextBackOff " 返回 " 2562047h47m16.8s " (~292年),反射器实际上永远等待。
这与第11225号错误分类相同,该分类固定在共同/后退/重试.go'中的Expresent BackoffAlgorithm';retrier'/retrypolicy.go ' 路径从未收到过该修正。 但API允许它和行为在建筑上无声地分歧。
□ 最小复制
在arm64上,一个单元测试通过溢出点驾驶未封顶的保险单,预期done' (-1ns),并在main'上观察到2562047h47m16.85475807s' (706e0b4')。
□环境/趋势
- 临时版本:主版(`706e0b4')
- darwin/arm64(arm64上的臭虫清单;amd64不小心有文件记载)
我将提交一份公关,在计算的时间间隔达到 " MaxInt64 " 时明确返回 " done " ,使两个平台都遵循记录的意图;上限政策不受影响.
内容来源: temporalio/temporal