所有时间为北京时间。用户确认维护方正在维护共享平台;按此前授权,本次只修改小树,不修改公共框架、其他租户、DNS、负载均衡或共享进程。
08:29–08:33 的真实诊断发现,小树请求已由 /opt/future-server/.modules/fmode-multiapp-api.worker.min.cjs 执行。与此前完整 SDK 的执行方式不同,此环境:
request.user 是普通对象,缺少 .fetch() / .get();两个网关的隔离克隆均复现 TypeError: current.fetch is not a function。Parse.User 只是 {className: '_User'},不是可构造的用户类,缺少原业务登录等 SDK 方法。Psql 是只提供部分查询方法的包装,底层 Psql.db 才是包含事务接口的 pg-promise 实例。7pIbDBJmKx、appId=7pIbDBJmKx_main。08:38:27,在一个事务中为小树 5 个现有网关添加兼容适配,更新前逐项校验原代码 MD5,保留现有业务源码与历史热修复,更新后回读代码 SHA-256 验证一致:
xiaoshu/app/gatewayxiaoshu/admin/gatewayxiaoshu/ops/gateway、gateway-v2、gateway-v3适配仅在公司、appId、密钥匹配、worker token、回环 URL 和事务接口检查通过后启用。使用该小树 worker 内安装的完整 Parse SDK,以 worker token 请求本机数据接口;将原普通身份对象恢复为 SDK 对象,并由原鉴权代码继续 fetch 和检查权限。当前调用的局部 Parse/Psql 绑定重新指向完整 SDK 和原数据库实例;SDK 配置仅影响此小树 worker,不跨租户。旧的完整 SDK 环境直接保持原状。没有改密码、充值、扣课或排课数据,也没有重启共享服务。
部署生成器同步接入适配,避免后续正常发布覆盖修复。首次隔离试验发现 Parse 8.7 包导出要求 CoreManager.js 扩展名,修正后才上线;该试验失败未影响正式网关。
timeout exceeded when trying to connect,业务查询阶段约 5 秒。小树新 worker 的业务池 max=2、connectionTimeoutMillis=5000。一次数据库采样显示全库 41/192 个连接,本租户 7 个连接、1 个活跃;尚不能仅凭这些样本认定最终瓶颈,未盲目调整连接池。入口恢复后需继续复验课表及并发等待。No server is available to handle this request. DNS 当前别名为 server.fmode.cn,同指向 139.159.253.131。对照发现公共域名 /health、/ 返回 200,而小树域名 /health、/parse/health、/ 返回 503。因此应优先检查小树域名的 Host/SNI 路由、后端成员和健康检查,不能笼统认定整个公共服务都已停止。server.xiaoshu.pro 的有效后端及健康检查;验证真实 Parse 用户会话、小树云函数与浏览器跨域预检,不要只看公共域名 health=200。XIAOSHU_ISOLATED_RUNTIME_COMPAT_V1 适配,或交付完整等价的 SDK/用户对象/事务兼容层后再撤除。私有证据:/Users/mac/.local/state/xiaoshu/qa/2026-11-14-multi-client-outage/。包含原网关备份、事务发布回执、错误栈、worker 接口摘录、真实读取结果;会话和原代码均未提交 Git。
回退仅允许将上述 5 个对象的 code 从已发布 SHA-256 对应版本恢复到私有备份,并校验当前版本未被他人更改。当前新运行环境下直接回退会重新引发 SDK 不兼容,故不可未经维护方协调就撤销适配。