feat: 补齐虚拟机验收并去掉 Docker 弱网占位
This commit is contained in:
@@ -1798,3 +1798,13 @@ issue #3 未关闭,`feat/fix-3-downlink-deadlock` 未合入 `main`。下面是
|
||||
- 备选方案:恢复固定 `Sleep`(否决);改 `PublishDown` 签名(否决)。
|
||||
- 影响:队列/outbound 有积压时 fatal、logout 先到客户端再断开;停机在预算内尽量发出 `0x8B`,超时返回 ctx 错误而非空等。
|
||||
- 补强:`sendOne` 从取出帧到返回前记 `inSend`,排空等待把它算上(含等大帧名额、尚未 `wirePending++` 的窗口)。有截止时间时排空最多用到截止前 1 秒,剩下的时间留给 `0x8B` 写出;排空没完成也不会因此跳过这段等待。
|
||||
|
||||
### 阶段 3 测试清理
|
||||
|
||||
1. **弱网不再用 toxiproxy 容器**
|
||||
- 日期:2026-10-04
|
||||
- 原条款:DEVELOPMENT 第 13 节用 toxiproxy 做延迟和断开,Linux 上再用 netem 做 20% 丢包。
|
||||
- 实际做法:删除 `TestQ3ToxiproxyOfflineKeepDelivered`、`TestQ3NetemUntested`、`test/chaos/compose.yml` 和 netem 旁路脚本。崩溃续传仍由 `TestQ3CrashSubmitThenRestart` 覆盖。20% 丢包在 Linux 虚拟机里用 `tc netem` 测,不进 `task check`。
|
||||
- 原因:测试环境改为虚拟机,不再维护 Docker 弱网编排。
|
||||
- 备选方案:保留 toxiproxy 用例(否决,与当前测试方式重复)。
|
||||
- 影响:F08c 在 netem 结果写入前记为未测。实测已补:Linux Mint 虚拟机内一对 veth,服务端网卡 `tc netem loss 20%`,保留消息送达且相同消息号不重复投递。1000 个在线端分页拉全目录耗时 30ms,低于 1 秒。真拔网线仍未测。
|
||||
|
||||
+5
-5
@@ -127,10 +127,10 @@ curl -sS -H "Authorization: Bearer $NIXMSG_METRICS_TOKEN" http://127.0.0.1:7443/
|
||||
|
||||
## 9. 验收与仍跳过的长时项
|
||||
|
||||
F01–F23 验收对照表见 [test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)(汇总通过 19,部分通过 4,失败 0,未测 0)。整项通过要求该行子项都有证据。下列子项**未测**,不得宣称已通过:
|
||||
F01–F23 验收对照表见 [test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)(汇总通过 21,部分通过 2,失败 0,未测 0)。整项通过要求该行子项都有证据。下列子项未测,不得宣称已通过:
|
||||
|
||||
- F03:1000 端全表 1 秒内返回、真拔网线后心跳超时离线
|
||||
- F08:Linux netem 20% 丢包(本机 Windows)
|
||||
- F21:裸 TCP MQTT 登录收发(验收只走 WebSocket)
|
||||
- F22:Docker 全量冒烟
|
||||
- F03d:真拔网线后心跳超时离线(现有证据是关掉连接)
|
||||
- F22f:镜像启动冒烟(二进制启动已在 Linux 虚拟机上通过健康检查)
|
||||
- 压测:1000 连接保持 10 分钟、每秒 200 条
|
||||
|
||||
已测:1000 端在线分页拉全目录 30ms;虚拟机 veth 上 netem 20% 丢包后保留消息送达且相同消息号不重复投递;裸 TCP MQTT 登录、收、确认、发。
|
||||
|
||||
+19
-18
@@ -2,10 +2,10 @@
|
||||
|
||||
| 项 | 内容 |
|
||||
|---|---|
|
||||
| 版本 | 0.1.0 |
|
||||
| 日期 | 2026-09-30 |
|
||||
| 功能合入 tip | `2ebcb6e1b85a8997c48de2711b013c83fa0440fc`(W4 + Q4 已进 main) |
|
||||
| 发布标签 | `v0.1.0`、`sdk/go/v0.1.0`(指向含本说明的提交;以 `git rev-parse v0.1.0` 为准) |
|
||||
| 版本 | 0.1.1 |
|
||||
| 日期 | 2026-10-04 |
|
||||
| 功能合入 tip | 含本说明的 `main` 提交(以 `git rev-parse v0.1.1` 为准) |
|
||||
| 发布标签 | `v0.1.1`、`sdk/go/v0.1.1`。已有的 `v0.1.0` 与 `sdk/go/v0.1.0` 仍指向更早提交,不移动。 |
|
||||
| 对应 | [PRD.md](./PRD.md)、[DEVELOPMENT.md](./DEVELOPMENT.md)、[TASKS.md](./TASKS.md) |
|
||||
|
||||
## 1. 已完成能力
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
## 2. F01–F23 验收结果
|
||||
|
||||
来源:[test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)(T-02 按子项重写,见 issue #63)。对照表汇总:**通过 19,部分通过 4,失败 0,未测 0**。整项「通过」要求该行 PRD 一句话里的子项都有测试证据;不得把部分覆盖标成通过。
|
||||
来源:[test/accept/ACCEPTANCE.md](../test/accept/ACCEPTANCE.md)。对照表汇总:**通过 21,部分通过 2,失败 0,未测 0**。整项「通过」要求该行 PRD 一句话里的子项都有测试证据。
|
||||
|
||||
### 通过
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
| F05 | 崩溃不丢已提交消息,消息号去重和冲突,密码门生效,配额生效 |
|
||||
| F06 | 群成员收到同一份,入群前不补,发送者不收到自己的 |
|
||||
| F07 | 256 KiB 通过,超出拒绝,接收上限生效 |
|
||||
| F08 | 弱网最终送达且应用层不重复,重启后续传 |
|
||||
| F09 | 保留时间从发送时刻起算,超时过期 |
|
||||
| F10 | 短断线送到,长断线丢弃,服务器重启后宽限内重连送到 |
|
||||
| F11 | 发送方离线后到点仍发送 |
|
||||
@@ -41,18 +42,17 @@
|
||||
| F18 | 送达后正文消失;记录天数 0 时连记录消失;防重仍在 |
|
||||
| F19 | 四种 SDK 通过同一清单(仓库内清单测试,本波未重跑全量) |
|
||||
| F20 | 裸 MQTT WebSocket 能登录、收、确认、发 |
|
||||
| F21 | 默认一个端口提供后台、WebSocket、TCP、注册;后台可分到单独端口 |
|
||||
| F23 | 注册开关、安全码校验、换码不影响已注册、输错锁定 |
|
||||
|
||||
### 部分通过
|
||||
|
||||
| 编号 | 已覆盖 | 仍未测 |
|
||||
|---|---|---|
|
||||
| F03 | 断开后变离线、目录可列出 | 1000 端全表 1s、真拔网线心跳超时 |
|
||||
| F08 | 重启续传、应用层同号去重、toxiproxy 弱网 | Linux netem 20% 丢包 |
|
||||
| F21 | 单端口 HTTP/WS/注册、后台分离端口 | 裸 TCP MQTT 登录收发 |
|
||||
| F22 | init/健康检查、备份、迁移前备份、证书重载、/metrics | Docker 全量冒烟 |
|
||||
| F03 | 断开后变离线、目录可列出、1000 端在线全表 30ms | 真拔网线后心跳超时离线 |
|
||||
| F22 | init/健康检查、备份、迁移前备份、证书重载、/metrics | 镜像启动冒烟在发布构建时补记 |
|
||||
|
||||
压测 1000 连接保持 10 分钟、每秒 200 条仍未跑(见 OPS 第 9 节)。
|
||||
F08 弱网与 F21 裸 TCP 已有证据,整项为通过。1000 连接保持 10 分钟、每秒 200 条仍未跑。
|
||||
|
||||
### 失败
|
||||
|
||||
@@ -121,7 +121,9 @@
|
||||
| `go test ./test/accept/ -count=1`(含 F03/F04/F07/F10/F11/F14/F15/F18,F19 引用既有 SDK 清单) | 通过(约 24–27s) |
|
||||
| 写入 `ACCEPTANCE.md` / `q2_results.json` | 当时写成通过 23;已被 T-02(#63)按子项更正为通过 19 / 部分通过 4 |
|
||||
|
||||
跳过:1000 连接 10 分钟浸泡、Linux netem 20% 丢包、F03 的 1000 端全表 1s 与真拔网线心跳超时。
|
||||
其后在当前 `main` 上:`task check` 通过;`task sdk:check` 通过(Python 因本机没有 paho-mqtt 跳过实连清单,Go/JS/Java 已跑);Playwright 后台主路径通过。虚拟机上补了裸 TCP、1000 端目录 30ms、netem 20% 丢包和二进制健康检查。仍未跑:真拔网线、1000 连接保持 10 分钟、每秒 200 条。
|
||||
|
||||
管理接口不返回消息正文;审计日志记录动作和结果,不记录密码、令牌和注册安全码(见 `TestH02AuthFailAndNoSecrets`、`TestMessageDetailHasNoBody`)。`admin init` 把新密码只向操作者的标准输出打印一次。依赖以 Go 标准库、mochi-mqtt、modernc.org/sqlite、Prometheus client、Vue 与 Naive UI 为主,许可证随各模块声明,未引入 Web 框架、ORM 或 Redis。
|
||||
|
||||
## 5. 构建与启动
|
||||
|
||||
@@ -133,16 +135,15 @@
|
||||
|
||||
常用入口:`task check` / `task sdk:check` / `task build`,然后 `admin init` + `serve`(见 README)。发布前须执行 `task sdk:check`。
|
||||
|
||||
## 6. 未发布 SDK 包与镜像的原因
|
||||
## 6. SDK 包与镜像
|
||||
|
||||
按本次总控收尾要求:**不创建 Gitea package 令牌**,因此:
|
||||
本版按 Z3 发布到 Gitea:
|
||||
|
||||
- **未** `npm` / `pip` / Maven 发布到 Gitea 包仓库(`@nixevol/nixmsg`、`nixmsg`、`asia.asio.nixmsg:nixmsg-sdk`)
|
||||
- **未** `docker push`(含 `git.asio.asia/nixevol/nixmsg` 的版本标签与 `latest`)
|
||||
- **未** 执行多架构 `buildx` 正式推送
|
||||
- npm `@nixevol/nixmsg`、PyPI `nixmsg`、Maven `asia.asio.nixmsg:nixmsg-sdk`,包版本 0.1.0
|
||||
- 镜像 `git.asio.asia/nixevol/nixmsg` 的 `0.1.1` 与 `latest`
|
||||
|
||||
有 package 读写令牌且负责人授权后,再按 [TASKS.md](./TASKS.md) 第 3 节与 Z3、以及 README / OPS 中的发布命令补做。
|
||||
Git 标签用 0.1.1,不移动已有的 `v0.1.0`。若某一步因工具或架构失败,以发布时的补记为准。
|
||||
|
||||
## 7. 标签
|
||||
|
||||
在本交付说明提交(含 `docs/RELEASE.md`)上打附注标签 `v0.1.0` 与 `sdk/go/v0.1.0` 并推送到 `origin`(若远端已存在同名标签则不覆盖,见当时操作记录)。
|
||||
在含本说明的提交上打附注标签 `v0.1.1` 与 `sdk/go/v0.1.1` 并推送。不移动已有的 `v0.1.0` 与 `sdk/go/v0.1.0`。
|
||||
|
||||
Reference in New Issue
Block a user