Skip to content

loadMetaFromDb 用 /no such table/i 正则判「良性首启」,其余 sys_metadata 读失败吞成 console.warn + loaded:0 —— isMissingTableError 的手抄第二份 #5841

Description

@baozhoutao

#5707(getMetaItemLayered overlay 裸 catch)时,在同文件读到的同族点。不在那单范围内(#5707 的文件面限定为 getMetaItemLayered 的一处 catch),按 Prime Directive #10 单独记在这里,unassigned。严重度不自评,交 PM 分诊。

位置

packages/metadata-protocol/src/protocol.ts,loadMetaFromDb 的外层 catch(以内容定位):

} catch (e: any) {
    // "no such table" is expected on first run before migrations execute — not an error.
    if (!/no such table/i.test(e.message ?? '')) {
        console.warn(`[Protocol] DB hydration skipped: ${e.message}`);
    }
}
return { loaded, errors, invalid };

loadMetaFromDb 是 boot 时把 sys_metadata 行水合进 SchemaRegistry 的那一步。

两个可分开处置的事实

1. 良性判定是消息正则的手抄第二份。 平台已经把「表还没建」集中成了一个谓词 isMissingTableError(@objectstack/metadata/errors),DatabaseLoader(#5108)、本包 SysMetadataRepository(#4867)、以及 #5532 / PR #5705 新引入的 rethrowUnlessMetadataStoreUnprovisioned(就在同一个文件里)都问它。这里却仍在对 e.message/no such table/i —— 一个驱动怪癖要教平台两遍。可预期后果:换驱动后该正则不匹配(Postgres 的措辞是 relation "sys_metadata" does not exist),首启会打出一条本不该有的告警;反向也成立——某个驱动把别的错误也写成 "no such table" 时会被误判为良性。这与 #5808「路由的 message 正则名单完全退休」是同一类。

2. 其余读失败的处置是 console.warn + loaded: 0 返回。 返回值 { loaded, errors, invalid } 里没有任何字段能表达「这次水合根本没读到存储」,调用方拿到的 loaded: 0 与「库里确实一条 overlay 都没有」不可分辨——ADR-0110 D3 的同一条规矩,落在 boot 侧。至少它是 loud(有 warn),所以不像 #5532 那样静默,这也是我不自评严重度的原因。

未验证 / 开工时先测量

  • 谁读 loadMetaFromDb 的返回值、有没有人对 loaded: 0 分支;boot 在完全读不到 overlay 的情况下继续以「只有 artifact」的世界服务,是否有已知的下游误判。
  • 修向:第 1 点应当就是「改问 isMissingTableError」(同文件已 import);第 2 点是否要升级为返回诊断字段或抛出,需要先量清消费方——别把两件事绑成一次改动

关联

#5707 / #5532(PR #5705)/ #5706(同文件同家族)、#5108#4867#5808(message 正则名单退休的先例)。同文件另有 #4636(loadMetaFromDb 的 object 分支读 record.packageId 恒 undefined)—— 不同的限、不是本单的父单,但两单落同一个方法,派发时注意串行。


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions