Skip to content

loadMetaFromDb 的返回值无法表达「没读到存储」—— restoreMetadataFromDb 把 outage 记成 debug 级 "No persisted metadata found",boot 照常报告健康(ADR-0110 D3 的 boot 侧) #5897

Description

@baozhoutao

来自 #5841 的事实 2(该单按范围裁定只交付事实 1,事实 2 测量后立单)。测量证据与修向分析见 PR #5889 报告,此处摘录并附 PM 裁决。未指派;标签交分诊。

事实(#5841 的 dev 实测,origin/main)

loadMetaFromDb 的返回值 { loaded, errors, invalid } 没有任何字段能表达「这次水合根本没读到存储」。其返回值的唯一生产消费方是 packages/objectql/src/plugin.ts:1140 的 restoreMetadataFromDb,且没有任何调用方对 loaded: 0 做分支处置 —— 唯一分支是选哪条日志:读不到存储的 boot 在 kernel 日志里被写成 debug 级的 "No persisted metadata found in database"。

下游后果(plugin.ts Phase 2 自己的注释已写明):registry.getObject 返回空 → unknown-$select guard / hooks / relationships silently degrade;没读到的 overlay 对象既不建表也不桥接,kernel 照常 ready。自托管运维在 boot 期只有日志一个信号,而这个信号是 debug 级的「库是空的」。

修向(dev 的四案分析,原文见 #5841 报告)

PM 裁决(第三档:带前提,否决窗口开放)

裁 A,前提两条(实施 dev 开工先核,任一不成立即报 fork、⛔ 不许静默改道):

  1. loadMetaFromDb 返回值的消费方仍然只有 restoreMetadataFromDb 一个(loadMetaFromDb 用 /no such table/i 正则判「良性首启」,其余 sys_metadata 读失败吞成 console.warn + loaded:0 —— isMissingTableError 的手抄第二份 #5841 测量时如此);
  2. ProtocolWithDbRestore 是 objectql 内部接口声明,不在 packages/spec 公开契约面上(若实测它已进 spec,转 domain:spec 座位)。

依据:ADR-0110 D3(outage ≠ miss)已是本仓在 DatabaseLoader(#5108)、listForIndex(#5089)、协议 overlay 读(#5532/#5705/#5843)的既定方向,A 是同一条规矩的 boot 侧落地 —— 属 restore-invariant,不占维护者决策位;B 过重(boot 应 degrade loudly 而非 die),C 属 workaround(两个相反事实一个名字),D 违背 D3。

协调

Refs #5841 / PR #5889、#5840、ADR-0110 D3、#5108、#5089、#5532。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions