• zqq61's avatar
    fix: OAuth 401 不再永久锁死账号,改用临时不可调度实现自动恢复 · ec6bcfeb
    zqq61 authored
    OAuth 账号收到 401 时,原逻辑同时设置 expires_at=now() 和 SetError(),
    但刷新服务只查询 status=active 的账号,导致 error 状态的账号永远无法
    被刷新服务拾取,expires_at=now() 实际上是死代码。
    
    修复:
    - OAuth 401 使用 SetTempUnschedulable 替代 SetError,保持 status=active
    - 新增 oauth_401_cooldown_minutes 配置项(默认 10 分钟)
    - 刷新成功后同步清除 DB 和 Redis 中的临时不可调度状态
    - 不可重试错误检查(invalid_grant 等)从 Antigravity 推广到所有平台
    - 可重试错误耗尽后不再标记 error,下个刷新周期继续重试
    
    恢复流程:
    OAuth 401 → temp_unschedulable + expires_at=now → 刷新服务拾取
      → 成功: 清除 temp_unschedulable → 自动恢复
      → invalid_grant: SetError → 永久禁用
      → 网络错误: 仅记日志 → 下周期重试
    ec6bcfeb
token_refresh_service_test.go 14 KB