修复 SYB 入库码迁移版本冲突导致 Admin API 无法启动 #125

Closed
opened 2026-08-28 10:37:52 +08:00 by ila · 2 comments
Owner

所属与来源

  • 父 MVP:#117;关联实现:#119。
  • 来源:用户于 2026-08-28 反馈 Go Supervisor 无法重启 goauto-admin-api,确认分析方案后要求建单并实施。
  • 前置依赖:#119 已实现并推送。
  • 可并行:否;当前 API 启动被本缺陷阻塞。

当前事实与根因

  • Supervisor 正常运行,goauto-admin-api 因启动迁移失败持续处于 Starting。
  • 1786701500000_purchase_shopee_order_snapshot.go 已使用并落库版本 1786701500000。
  • #119 新增的 1786701500000_syb_inner_code.go 重复使用该版本;迁移注册表以 13 位版本为 Map 键,数据库又已记录该版本,故新迁移被跳过。
  • 启动后完整性检查发现 9 张 syb_inner_code_* 表缺失并主动退出。

目标方案

  1. 将尚未应用的 SYB 入库码迁移改成唯一且晚于现有最大版本的版本号;不得删除、篡改或重放已有 sys_migration 记录。
  2. 在迁移注册层拒绝重复版本注册,错误必须在测试或启动迁移前明确暴露,不能静默覆盖 Map 条目。
  3. 增加重复版本检测、待执行迁移和现有数据库升级测试。
  4. 执行受影响测试及仓库全量验证。
  5. 使用本机 config.yaml 应用迁移,再通过 Supervisor 重启并核对 API 状态、8010 监听、健康检查和日志。

非目标

  • 不修改档口入库码业务规则、接口或页面。
  • 不清理已有迁移记录,不迁移生产环境,不连接或写入真实 SYB。
  • 不修改 Admin UI Supervisor 配置。

验收标准

  • 仓库中不存在重复迁移版本注册;重复注册测试明确失败而非覆盖。
  • 现有数据库执行且仅执行新的 SYB 迁移,创建全部 9 张表,已有迁移不重放。
  • 迁移再次运行幂等跳过。
  • 服务端测试、构建及仓库全量验证通过。
  • goauto-admin-api 在 Supervisor 中为 Running,8010 正常监听,健康检查返回 200,最新日志没有迁移缺表错误。

风险与文档影响

  • 涉及数据库迁移和本机应用;用户已在提出本工单时明确同意按上述方案实施。
  • 无长期 Wiki 影响:不改变模型、接口、状态、运行命令或业务规则,仅修正迁移版本身份并强化已有迁移安全门禁;事实与操作方式保持不变。
## 所属与来源 - 父 MVP:#117;关联实现:#119。 - 来源:用户于 2026-08-28 反馈 Go Supervisor 无法重启 `goauto-admin-api`,确认分析方案后要求建单并实施。 - 前置依赖:#119 已实现并推送。 - 可并行:否;当前 API 启动被本缺陷阻塞。 ## 当前事实与根因 - Supervisor 正常运行,`goauto-admin-api` 因启动迁移失败持续处于 `Starting`。 - `1786701500000_purchase_shopee_order_snapshot.go` 已使用并落库版本 `1786701500000`。 - #119 新增的 `1786701500000_syb_inner_code.go` 重复使用该版本;迁移注册表以 13 位版本为 Map 键,数据库又已记录该版本,故新迁移被跳过。 - 启动后完整性检查发现 9 张 `syb_inner_code_*` 表缺失并主动退出。 ## 目标方案 1. 将尚未应用的 SYB 入库码迁移改成唯一且晚于现有最大版本的版本号;不得删除、篡改或重放已有 `sys_migration` 记录。 2. 在迁移注册层拒绝重复版本注册,错误必须在测试或启动迁移前明确暴露,不能静默覆盖 Map 条目。 3. 增加重复版本检测、待执行迁移和现有数据库升级测试。 4. 执行受影响测试及仓库全量验证。 5. 使用本机 `config.yaml` 应用迁移,再通过 Supervisor 重启并核对 API 状态、8010 监听、健康检查和日志。 ## 非目标 - 不修改档口入库码业务规则、接口或页面。 - 不清理已有迁移记录,不迁移生产环境,不连接或写入真实 SYB。 - 不修改 Admin UI Supervisor 配置。 ## 验收标准 - [ ] 仓库中不存在重复迁移版本注册;重复注册测试明确失败而非覆盖。 - [ ] 现有数据库执行且仅执行新的 SYB 迁移,创建全部 9 张表,已有迁移不重放。 - [ ] 迁移再次运行幂等跳过。 - [ ] 服务端测试、构建及仓库全量验证通过。 - [ ] `goauto-admin-api` 在 Supervisor 中为 Running,8010 正常监听,健康检查返回 200,最新日志没有迁移缺表错误。 ## 风险与文档影响 - 涉及数据库迁移和本机应用;用户已在提出本工单时明确同意按上述方案实施。 - 无长期 Wiki 影响:不改变模型、接口、状态、运行命令或业务规则,仅修正迁移版本身份并强化已有迁移安全门禁;事实与操作方式保持不变。
Author
Owner

实施完成,待用户验收

根因已按工单修复并推送,提交:7b55745。

实现

  • 将未应用的 SYB 入库码迁移从已冲突的 1786701500000 重命名为唯一且晚于现有版本的 1787884693633;没有删除或修改任何既有 sys_migration 记录。
  • Migration.SetVersion 现在遇到重复版本立即以明确错误拒绝,禁止静默覆盖 Map 条目。
  • 增加重复注册回归测试,并扫描仓库迁移文件确认版本唯一。

验证

  • 专项:go test ./cmd/migrate/migration ./cmd/migrate/migration/version-local ./app/goauto/migrations,通过。
  • 全量:.\scripts\verify.ps1 -Component all,通过;Web lint 为 0 error、30 条存量 warning。
  • 本机首次应用:日志显示 新执行 1 个,跳过 22 个,仅写入新版本 1787884693633;完整性检查通过,9 张 syb_inner_code_* 表均存在。
  • 受控执行 ctl restart goauto-admin-api 后:二次迁移显示 新执行 0 个,跳过 23 个,证明已有迁移未重放且新迁移幂等。
  • Supervisor:goauto-admin-api Running;端口 8010 正常监听;GET /api/v1/health 返回 200。
  • 未连接或写入真实 SYB,未修改 Admin UI 配置。

文档影响

无长期 Wiki 影响:模型、接口、状态、业务规则、配置和运行命令均未改变,仅修正迁移版本身份并强化既有迁移注册安全门禁,因此按规则跳过 Wiki 更新与同步。

工作区原有未跟踪文件 gitea.zip 保留且未纳入提交。

## 实施完成,待用户验收 根因已按工单修复并推送,提交:`7b55745`。 ### 实现 - 将未应用的 SYB 入库码迁移从已冲突的 `1786701500000` 重命名为唯一且晚于现有版本的 `1787884693633`;没有删除或修改任何既有 `sys_migration` 记录。 - `Migration.SetVersion` 现在遇到重复版本立即以明确错误拒绝,禁止静默覆盖 Map 条目。 - 增加重复注册回归测试,并扫描仓库迁移文件确认版本唯一。 ### 验证 - 专项:`go test ./cmd/migrate/migration ./cmd/migrate/migration/version-local ./app/goauto/migrations`,通过。 - 全量:`.\scripts\verify.ps1 -Component all`,通过;Web lint 为 0 error、30 条存量 warning。 - 本机首次应用:日志显示 `新执行 1 个,跳过 22 个`,仅写入新版本 `1787884693633`;完整性检查通过,9 张 `syb_inner_code_*` 表均存在。 - 受控执行 `ctl restart goauto-admin-api` 后:二次迁移显示 `新执行 0 个,跳过 23 个`,证明已有迁移未重放且新迁移幂等。 - Supervisor:`goauto-admin-api Running`;端口 8010 正常监听;`GET /api/v1/health` 返回 200。 - 未连接或写入真实 SYB,未修改 Admin UI 配置。 ### 文档影响 无长期 Wiki 影响:模型、接口、状态、业务规则、配置和运行命令均未改变,仅修正迁移版本身份并强化既有迁移注册安全门禁,因此按规则跳过 Wiki 更新与同步。 工作区原有未跟踪文件 `gitea.zip` 保留且未纳入提交。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:24 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#125