diff --git a/src/polygateway/errors.py b/src/polygateway/errors.py index 6fdf8c5..77d6033 100644 --- a/src/polygateway/errors.py +++ b/src/polygateway/errors.py @@ -116,9 +116,20 @@ class ResultInvalidError(PolyGatewayError): class GatewayUnavailableError(PolyGatewayError): - """scope 级暂时不可用;业务侧 catch 本类做延期重投(CHS arq 模式)。 + """scope 级暂时不可用: 库的**调用级**预算已经耗尽。 - `retry_after_s` 非可选(0 = 可立即重试),承 CHS ProviderUnavailableError。 + **职责边界(issue #14)**: 调用级的重试、退避、换源、等待冷却全部在库内, + 不需要下游再写一层——两边各写一份必然漂移(库调了退避曲线而下游不知道, + 下游改了等待上限而库的遥测算不进去),漂移之后"这次调用到底等了多久、 + 试了几次"就没有单一事实源答得出来。本异常表示那份预算(重试预算或 stall + 预算)已经用完。下游据此再投是**任务级重试**,与调用级重试语义不同,由 + 业务自行在库外包(ARCH §7.2 单层重试原则)。 + + 熔断开路时是当场抛本类还是先等冷却过去,由 `{SCOPE}__CIRCUIT_OPEN` + 决定(缺省 fail_fast;单源 scope 建议配 wait)。 + + `retry_after_s` 非可选,语义是"距离**确定**可再试的时刻还有多久"; + `0` 表示不存在确定的等待时刻(可立即重试),承 CHS ProviderUnavailableError。 """ def __init__(