Files
easyai/system-update/releases/model-conversion-20261003/test/README.md
T

50 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 模型转换服务测试环境发布验收
2026-10-04,`https://demo.51easyai.com`,主机 `8.218.158.189`,部署目录 `/root/easyai`。
测试环境已发布并完成以下验收;生产未部署,本次仅推送固定版本镜像,没有推送 `latest`。
## 发布和兼容升级
- 部署实现:`2a1192eb7ec822773f55af96fa12e06bf96774a8`。后端补丁:`be56a7e0ec79d1a1e7420d870709014ed4bf010a`。
- 初次从旧部署 `f04bb5e` 更新,实际复现了定制 Compose 和未跟踪配置阻断旧脚本拉取,以及 updater 占用 API 固定地址的问题。首次使用新版 `update.sh` 的旧配置迁移入口完成备份、语义合并和更新,再由同一脚本部署服务;没有手动修改数据库或替代脚本启动业务容器。
- 最终更新命令:`UPDATE_MODE=image UPDATE_NON_INTERACTIVE=1 UPDATE_RELEASE_VERSION=3.23.0.20261003.1 UPDATE_SERVICES='easyai-server easyai-web model-conversion-worker' bash /root/easyai/update.sh`。
- API 镜像重新构建。前端 SSR、no-SSR 和 Worker 发布 `.1` 版本别名,镜像摘要与原版本相同,其 OCI 构建版本仍为 `3.23.0.20261003`;测试主机运行 SSR。完整摘要见上级发布记录及 `patch-deployment.json`。
- API、前端、Worker、updater 均健康;版本接口为 `3.23.0.20261003.1`,主页、健康及更新就绪接口均 HTTP 200。补丁更新中的 13 个非目标容器保留容器 ID 和启动时间,Nginx 及原鉴权、Mongo、Redis配置已核验保留。
- 旧配置备份保存在主机受限目录 `data/deployment-backups/legacy-update-20261003-075918-g3q8cib5`;本机记录不含配置密钥。后续固定版本更新直接使用部署目录的 `update.sh`。
## 浏览器上传问题的复现和修复
实际进入普通 `/ai/canvas/:projectId`,从文件输入选择 OBJ,确认米、默认轻量副本和性能优先。修复前,上传计划返回 HTTP 201,但本地存储合法地省略了 `headers`;浏览器在 `Object.entries(upload.headers)` 抛出 `TypeError: Cannot convert undefined or null to object`,未发送文件 PUT,未进入转换。
修复仅在模型转换接口把省略的请求头变为 `{}`,保留云存储提供的签名头,通用存储行为不变。真实服务回归测试修复前 1 失败、1 通过;修复后转换协议 13 项和存储既有行为 27 项全部通过。证据为 `browser/upload-regression.json`,失败截图为 `browser/import-failed.png`。
修复后真实 Chrome 通过普通画布执行了文件 PUT、资源完成、CanvasTask、独立 Worker 转换及 WebGL 加载,原始网络证据保存在 `browser/uncached-import.json`。没有隐藏界面、替换真实加载器或强制点击。
## 实际结果
| 验收 | 结果 | 原始记录 |
| --- | --- | --- |
| 默认素体 | 站立身高 1.72 米 | `browser/results.json` |
| OBJ 导入 | 20 × 0.2 × 20 米,默认轻量副本、性能优先 | `browser/uncached-import.json`、`browser/import.png` |
| 实际缩放 | 0.05 → 1 × 0.01 × 1;10 → 200 × 2 × 200;20 → 400 × 4 × 400;恢复 1 → 20 × 0.2 × 20 米 | `browser/transform-save.json`,数值来自实际控件读数 |
| 保存与全新浏览器重开 | 米制 `sceneState` 保留轻量版本、倍率 1、资源 ID;尺寸 20 × 0.2 × 20 米;场景 JSON 3239 字节,没有 Base64;页面无异常 | `browser/results.json`、`browser/saved-reopened.png` |
| 约 80 万面 GLB,补丁环境重测 | 798848 → 100000 三角面;19203544 → 714896 字节;20 × 0.200000003 × 20 → 20 × 0.199977756 × 20 米;高度误差约 0.022 毫米;产物 SHA 校验通过 | `patch-conversion/results.json` |
| 4K 贴图 | 4096² → 1024²;生成 KTX2 和 PNG 兼容产物;保留尺寸 | `texture-4096/results.json`,原版本实测,补丁复用同一 Worker 镜像 |
| 骨骼和动画 | 100001 三角面不减面;3 个节点、1 套骨骼、1 个动画保留;尺寸保留 | `skin-animation/results.json`,原版本实测,补丁复用同一 Worker 镜像 |
| Worker 专属接口与付费通道 | 匿名和普通登录 token 都不能调用产物管理接口,均 HTTP 403;混元通道关闭 | `patch-worker-access.json` |
验收分阶段执行:先完成真实导入、变换和普通保存,再以全新 Chrome 会话重开并检查。保存会自动关闭编辑器;已有图片输出的节点通过编辑按钮重开,双击图片按原契约打开图片预览。米制 fixture 使用正式 `sceneState` 字段。早期脚本对这些入口的错误假设已纠正,不计作业务失败或成功证据。
## 耗时和资源边界
- 转换协议定向 Nx:2.38 秒(13 项,Jest 0.84 秒);存储定向 Nx:1.87 秒(27 项,Jest 0.638 秒)。
- Shared 构建 0.66 秒,API 定向 Nx 构建 20.83 秒。正式 Linux amd64 Dockerfile 构建、固定版本推送及实际部署均已完成;未记录本次 Docker 构建和浏览器全链路的完整墙钟耗时。
- 最后一次 GLB 链路共 71.932 秒:上传 18.502 秒,转换、任务等待和产物下载共 52.444 秒。该数值包含网络与存储开销,是一次功能复验,不是受控 A/B/C benchmark,也不能单独解读为减面计算耗时。
- 转换及下载期间的 12 个本机 API 可用性采样全部 HTTP 200,中位数约 2.17 毫秒,最大约 6.17 毫秒。见 `patch-runtime-samples.json`;这不能证明满载 P95 退化目标。
- Worker 实际限制:2 CPU、4 GiB、并发 1、PID 64、只读根文件系统、无主机端口;共享内部鉴权配置匹配。见 `patch-deployment.json`。测试主机仅 2 CPU、3.576 GiB 实际内存、没有 swap,不能把本轮小规模通过当作生产容量结论。
- 旧配置迁移、固定版本及 Bash/PowerShell 更新定向测试通过,分别约 1.28 秒、21.045 秒;测试主机的旧脚本冲突和新版脚本更新另外经过真实执行。没有用命令 mock 替代真实发布验收。
## 尚未覆盖
客户原始 GLB、其他实际硬件、Worker 满载时的 API 基线对照、20 次循环内存趋势,仍需独立验收。测试主机没有重新执行全部旧场景/模板交互,也没有完成编辑器、机位预览、图片与视频的逐像素对应点检查;先前定向/本地记录仅代表其原环境。不得据此声称视觉无损、全部性能目标或生产验收已通过。原质量记录中的国际化历史缺失项仍未改动。