Skip to content

观察:engine 侧 DriverConnectError 带着与 #5794 相同的两句建议 —— 是否真能被 ERR_MODULE_NOT_FOUND 命中,未实测 #6305

Description

@hotlong

在实施 #5794(PR #6302)扫消费半径时发现的旁证,不在该 PR 范围内,单独记录。落点 packages/objectql/src/driver-connect-errors.ts(域标签留分诊座位补)。

观察到的事实

#5794 修的是 packages/services/service-datasourceDatasourceConnectionService.handleFailure 的 fail-fast 收尾句。全仓 grep 那句通用建议时,另一处出现在 packages/objectql/src/driver-connect-errors.ts:65-73,DriverConnectError 的构造函数里:

A driver that did not connect cannot serve queries, and the schema sync that runs right
after init would issue DDL against it. Fix the datasource configuration (e.g.
OS_DATABASE_URL), or set OS_ALLOW_DRIVER_CONNECT_FAILURE=1 to boot anyway and serve
errors until the datasource becomes reachable.

同样的两句建议,同样的成因分类缺失 —— 只要底层原因是「模块加载不出来」,这两句就同样是 #5794 论证过的有害建议(配置本来是对的;设开关只会让坏工作区宣称启动成功)。

为什么它不是 #5794 的一部分,也不是今天有人撞得到的形态

DriverConnectErrorObjectQL.init() 汇总,收的是已注册 driverconnect() 拒绝。而在未构建的工作区里,driver 压根构造不出来:失败发生在 DefaultDatasourceDriverFactory.create()await import('@objectstack/driver-…'),还没轮到注册。所以 #5726 / #5794 实测到的那条消息是 service 侧那条,不是这条 —— 这条在那个场景里到不了。

未实测的部分(明说,别当结论用)

存在一条理论上的路径:driver 本身构造成功、注册了,但它的 connect() 里懒加载客户端(例如 SqlDriver + client: 'pg' 走 knex 解析 pg)。若那个客户端没装,connect() 会以模块解析失败拒绝,于是 DriverConnectError 就会带着上面两句建议描述一个「装个包」的问题。

我没有实测这条路径(本工作区里 pg 是装着的,构造不出那个状态),所以本单按观察类记录,不带 pm:queue,严重度请分诊座位判定 —— 若分诊认为值得,合适的做法大概是复用 #5794 落下的 @objectstack/types 判据 isModuleNotFoundError,而不是在 objectql 里另写一份。

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions