I2.13.2stop auto-retry and hand off设计
多次自动重试失败后应停止并转交用户手动决定
别名: 重试转交用户 · 自动重试上限 · give up to the user
概念解释
自动重试是系统替人采样通道。采样几次仍失败,通道这次大概不是「再等 400 毫秒就好」。继续自动只是把退避曲线拉长,人被留在一块自己不能改的等待里。转交是停掉自动,把决定权交回:再试一次、改条件、取消、离线做别的。上限不是脾气,是承认自动这一档已经用尽。
机制
瞬态故障的寿命短,两三次带退避的尝试已经覆盖「丢包 + 短暂过载」这类分布的大部分。再往后,失败更可能来自持续的条件:鉴权过期、对象没了、服务在维护、本地离线。自动重试对这些条件没有新信息,只会推迟人采取其他策略的时刻。人在自动还在跑时很难插入:取消可能和下一次自动撞车,改参数不知道会不会被下一次覆盖。
转交要把自动这一层的结束说清楚:「已重试 n 次,仍无法加载」,然后出现就近的手动动作。若转交之后自动还在暗处跑,人点手动会变成又一次双发,转交是假的。停,是真的停。
边界
后台任务、同步队列可以有更长的自动预算,因为人不在盯;但仍要有上限,并在任务列表里变成失败态等人处理,而不是无限退。用户刚刚点了手动重试,计数应单独算一次新的自动预算,不要把上一轮的次数直接累加到「你又失败了」。对端用 Retry-After 给出明确冷静期时,应遵守,不要因为「已经转交」就让人手动去打还在冷静的门——手动也要看见冷静期。安全写操作在转交时更应停自动,避免在人已经走开之后还在暗处付款。
怎么落地
- 给自动重试一个小的次数或总时长上限(例如 3 次或十几秒)。到了就停,进入失败呈现。
- 转交文案包含「已经自动试过」,以免人以为一次都没试就在要他点。
- 停之后不再发自动请求,直到人手动或网络恢复事件显式启动新一轮。
- 验证:持续失败。界面应在有限几次后停止网络活动,并出现可点的下一步。若过了一分钟请求还在按退避往外打,转交就没发生。