Skip to content

[metadata-protocol] seed-loader:无 pass-2 时「引用解析不了 ⇒ 整条记录丢弃」计为 error 却一行日志都不打(#4729 判据的更深一格) #4997

Description

@xuyushun441-sys

发现于 #4729(把 seed-loader 里「计数为错、日志为 warn」的行对齐到 error)的同文件盘点。本条不在 #4729 的判据内(它盘的是 this.logger.warn 调用),所以只记录、不在那个 PR 里改。

现象

packages/metadata-protocol/src/seed-loader.ts,pass-1 引用解析、multiPass 关闭的分支:

} else {
  // Cannot resolve and no pass 2 will run — skip the whole record
  // (LOUD: counted + reported). Writing it anyway would either
  // carry the raw natural-key string into the FK column or, on
  // update, corrupt the existing row.
  pushError(
    `Cannot resolve reference: ${objectName}.${ref.field} = '${String(unresolvedItem)}' → ` +
      `${ref.targetObject}.${ref.targetField} not found`,
    unresolvedItem,
  );
  unresolvedRefError = true;
}

pushError 把错误推进 errors / allErrors(⇒ success: false),随后 unresolvedRefErrorerrored++continue —— 整条记录被丢弃,一行都没有种下去。但这里没有任何 logger 调用:注释写的 "LOUD" 只兑现了「计入结果对象」,控制台上一个字都没有。

为什么值得单开

#4729 的论点是「计数与日志级别应当一致」:结果对象里数得到、日志却停在没人读的 warn。这一处是同一条链的更深一格 —— 计数有、日志级别是「无」。对只看 boot 日志的运维/agent 来说,一次丢了 N 条记录的 seed 与一次干净的 seed 在控制台上完全一样(区别只在调用方是否检查了 result.success,而 packages/runtime 的若干 seed 调用点只是 await 之后继续)。

check:durability-log-level 把这种形态叫 silent-swallow,但那个门禁只扫 try/catch,而这里不是 catch,所以扫不到。

期望(待维护者确认)

未认领。

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions