Skip to content

调查(核心):评估“服务不可用”的重试语义 #2802

Description

@yinlianghui

观察到的行为

在本地框架代码中进行手工验证后,默认暂时性错误分类器得到以下结果:

  • Error('service unavailable') 被分类为非暂时性错误。
  • Error('server unavailable') 被分类为暂时性错误。
手工复现命令及输出

在框架仓库根目录执行:

pnpm exec tsx -e "import { defaultIsTransientError } from './packages/core/src/utils/bulk-write.ts'; console.log('classifiedTransient=' + defaultIsTransientError(new Error('service unavailable')))"
classifiedTransient=false

对照用例:

pnpm exec tsx -e "import { defaultIsTransientError } from './packages/core/src/utils/bulk-write.ts'; console.log('serverUnavailable=' + defaultIsTransientError(new Error('server unavailable')))"
serverUnavailable=true

判定依据

  • 默认暂时性错误分类器由 perf(seed,import): route bulk writes through the engine's batch insert path #2680 引入。
  • 重试函数只有在分类结果为 true 时才会继续重试。
  • 本地手工验证确认:
    • service unavailable 的分类结果为 false
    • server unavailable 的分类结果为 true
  • 尚未测试真实的 Turso/libSQL 错误对象和错误信息。
  • SQLite 无法自然复现远程服务不可用故障。
  • 尚未验证远程写入已经提交但响应丢失时的重复写入风险。

已经确认本地分类器存在上述行为,但它目前不是已确认的生产环境错误。在获得具有生产代表性的证据之前,该问题保持关闭。

建议:需要产品决策。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions