H3.13.2per-item retry after partial failure设计
失败项需提供单独重试的入口而非要求整体重来
别名: 单项重试 · retry failed only · 不要整批重来
概念解释
十七项已经成功,三项失败,下一步应是对这三项再试或改完再试,而不是把二十项再提交一遍。单独重试把恢复作用域收在失败集合上。整批重来会把已成功项再送一次,非幂等时制造重复副作用,幂等时也浪费并制造新的部分失败。这条管恢复入口的作用域,不管列表上状态怎么画。
机制
人在部分失败后的目标是补洞,不是重做整张图。若唯一按钮是「再试一次」且作用在原选择集上,成功项会再次进入流水线。对端若没有去重,洞补上的同时出现双份。作用域限定在仍失败的 ID 列表,成功项保持不动。入口要就近:在失败项上或在「重试 N 项失败」的集合动作上,而不是回到批量模式从头勾选。整批重来还摧毁人对「哪些已经好了」的记忆,核对成本回到零。
边界
事务性批量(要么全成要么全撤)没有「已成功项」,单独重试没有对象,应改为整笔再提交并说清。失败原因若是权限或规则,重试按钮应先指向修改,而不是盲目再打同一请求。进行中的项不是失败项,不能被「重试失败」卷进去。
怎么落地
- 混合结果上提供「重试失败项」,载荷只含仍失败的标识;成功项不再发送。
- 单项上也放重试,便于只处理其中一条。
- 非幂等的失败项重试前先查询该项状态,已成功的从失败列表拿走。
- 验证:十七成三败之后点恢复。服务端若又收到那十七个 ID,入口就还在整批重来。