docs: record test deployment and long-message completion acceptance
CSS quality / css-quality (push) Has been cancelled
CSS quality / css-quality (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,76 @@
|
|||||||
|
# 2026-09-16 五项整改测试环境交付与验收
|
||||||
|
|
||||||
|
## 版本、范围与证据边界
|
||||||
|
|
||||||
|
截至2026-09-16 19:20 CST,测试环境100.93.204.60:12026运行`010ba3216889032a6160cdb14d8536b616ae7102`,线上标记、归档源码、Gateway产物和服务由标准release verify核验。此前依次发布五项实现`a350aca883369b1cfa67ea630a93cf592a9ed6f7`,更名提交`a0209f93bc8eee6cb08a9d7cace4163b26749ae6`随同发布。远端main已回读010ba32,分叉0/0;收尾文档后续独立提交,不表示再次重启应用。预生产未连接或部署。
|
||||||
|
|
||||||
|
已实现:第4阶段方案第10节的耐久收尾工作/原子认领/revision与fence/事务和Outbox/失败接续;通道测试免签名与引流检测(普通客户链路保留规则);HTTP参数化真实发送及应用层HTTP报文;告警恢复留存与人工清除;监控失败保留最后真实快照并标明采样时间。短信链路细节见[权威方案](phase-4-send-pipeline-redesign.md)第10节。
|
||||||
|
|
||||||
|
保护原61项修改与草稿,不提交原metrics、版本3.0.0、发布工具或部署脚本草稿。原包版本修改未进入应用提交;产品命名与工程版本提交是独立事项。共享文档仅精确暂存本轮新增段落;原文件快照及摘要保留于`.local-data/five-fixes-20260916/before`与`protected-hashes.json`。发布工具仍为受保护的未提交工具,应用SHA不代表工具版本,其摘要由每份plan.json绑定。
|
||||||
|
|
||||||
|
## 验收结果
|
||||||
|
|
||||||
|
| 范围 | 实际结果 |
|
||||||
|
|---|---|
|
||||||
|
| 精确应用候选a350aca | 前端35套163项、API77套834项;类型/格式/lint/样式/CSS门禁及远端生产构建通过。工作区API835项含一项受保护metrics测试,不混为候选成绩 |
|
||||||
|
| PostgreSQL | 隔离真实PG全量106迁移重放;11组并发/原子回滚/多进程/过期租约/fence/通知账务/人工处理告警测试通过。路由/限速隔离测试不冒充真实Gateway |
|
||||||
|
| Gateway补充010ba32 | 两种协议即时TCP应答各500次×5轮通过;全量go test ./...、go vet ./...通过,标准工具对精确提交重新validate |
|
||||||
|
| 真实短信链路 | 专用隔离应用20条业务短信,另1条无租户通道测试;模拟供应商只监听测试机loopback,不转真实运营商。涵盖2/3/4段、逆序和每段3次重复DELIVER、补发成功及最终失败 |
|
||||||
|
| 最终账务 | 20份账单,19条成功、1条失败;初始隔离资金1000000,扣费20150、退款650、余额980500(均数据库内部整数单位);冻结-20150与释放20150抵消,账户与流水一致 |
|
||||||
|
| 耐久工作/Outbox | 24个业务发送尝试工作全部idle且revision=processedRevision;所有对应Outbox为published;每个源Submit最多一个后继,无额外账单或业务通知 |
|
||||||
|
| HTTP通知 | 20个稳定业务事件全部delivered;5个早期TLS失败自动恢复,独立503和超时样本各第二次200;重试复用原投递记录,不补发短信。接收端未单独验HMAC,不宣称该项完成 |
|
||||||
|
| CMPP下行 | 客户断线后重连,实际收到并ACK 9份客户原始分段回执;Registered_Delivery=false样本无CMPP通知,HTTP按both配置单独生成;无多余目标 |
|
||||||
|
| 通道测试 | UI敏感操作由用户重新验证身份;195字、无签名且含未报备example.invalid链接,3段全部真实提交并delivered;tenant/batch均空,不创建客户HTTP或CMPP通知 |
|
||||||
|
| HTTP调试页面 | 实际点击发送返回202,展示请求/返回HTTP报文;对应3段短信终态delivered,未将仅202当最终送达 |
|
||||||
|
| 监控页面 | 1600×1000、1366×768、390×844检查,刷新、路由切换、页面重载通过;真实API成功后注入请求中断,仍保留真实快照及时间,解除中断恢复刷新;无页面JS异常 |
|
||||||
|
| 告警人工清除 | 实际发布产生的cmpp-api恢复告警持续留存;UI手动清除后刷新不再出现,PG clearedAt=11:09:32.356Z,一条monitoring.alert_cleared审计;未清除原有磁盘/演示告警 |
|
||||||
|
| 最终队列 | gateway.submit.commands/results/protocol.logs三个消费组pending=0、lag=0;没有凭SubmitResp推算容量 |
|
||||||
|
|
||||||
|
### 验收发现的附加缺陷及处理
|
||||||
|
|
||||||
|
a350aca初次真实验收中,CMPP样本923和页面样本931首尝试分别只写出2/4、1/3段,出现60秒SUBMIT_TIMEOUT并自动补发。只读代码确认Gateway发送后才登记等待者,快速应答可能被readLoop提前丢弃;未修代码真实TCP回归在2.0第206次、3.0第7次复现。010ba32将写包和登记等待者置于与heartbeat相同mu→sendMu临界区,已按标准流程第二次发布。
|
||||||
|
|
||||||
|
010ba32新增6条样本970~975(2/3/4段各两条),6个Submit、18个wire分段全部一次成功,无补发。全轮合计74个wire分段包含通道测试3段,以及修复前异常首尝试3段;20条业务消息24个Submit中的4个后继,分别为2个预设失败场景和2个修复前竞态场景。原异常保留,不算成修复后的无重复样本。短信账务仍按业务消息一份。
|
||||||
|
|
||||||
|
首轮模拟CMPP客户端MsgSrc误填account,入口结果9,确认无业务创建后修正测试客户端才运行正式样本;最初503/超时控制读取错误JSON层级,952/953仅作为普通200样本,修正为data.phoneNumber后962/963才计故障验收。保留原失败记录,不用后续成功覆盖。Webhook临时域名在测试机解析到198.18.1.79造成TLS失败;仅对该QA域名临时hosts映射到经TLS验证的地址,未关闭证书校验,验收后精确移除。
|
||||||
|
|
||||||
|
## 发布及最终工具状态
|
||||||
|
|
||||||
|
两轮均使用npm run release的plan→validate→preflight→prepare→deploy→verify,使用已授权测试凭据的安全本机入口。第一轮106迁移,第二轮无新增迁移。标准工具不接收业务验收录入,报告中businessAcceptance仍是“未执行”;业务证据由本文件独立维护。
|
||||||
|
|
||||||
|
最终verify状态为`deployed-needs-review`,唯一提示“Business counts changed during online release”。已核对:第二轮基线messages/submits为119597/130835,验收后119603/130841,恰为新增6条/6次,无额外记录。应用文件日志新增errorMarkers=0,所涉服务journal warningLines=0;精确版本、资源及服务检查通过。保留工具原始提示,不改状态文件冒充全绿。
|
||||||
|
|
||||||
|
| 发布计划 | 远端准备 | 备份 | 停止 | 迁移 | 启动恢复 | 工具验证 |
|
||||||
|
|---|---:|---:|---:|---:|---:|---:|
|
||||||
|
| 20260916T104026-a350aca88336-7f5f9fd9 | 58.1s | 34.6s | 3.7s | 1.2s | 5.4s | 5.0s |
|
||||||
|
| 20260916T110901-010ba3216889-257390d0 | 17.0s | 34.7s | <0.1s | <0.1s | 2.2s | 0.9s |
|
||||||
|
|
||||||
|
数字取自state.steps,不将开发、浏览器诊断、验证码/重新认证等待、Webhook网络排障或附加竞态修复计为服务停机。本地候选验证日志独立保留;API全量候选179.627s,前端工作区115.33s不冒称候选耗时。
|
||||||
|
|
||||||
|
恢复资产分别位于:
|
||||||
|
- `/var/backups/cmpp-platform/20260916T104026-a350aca88336-7f5f9fd9-attempt-1789555402719951496`(原cbc4a03)。
|
||||||
|
- `/var/backups/cmpp-platform/20260916T110901-010ba3216889-257390d0-attempt-1789557105165052776`(原a350aca)。
|
||||||
|
|
||||||
|
两份备份经工具摘要/可读性检查,未进行整机或数据库恢复演练。旧版本不理解新工作表,禁止直接回退并宣称接续已验证。
|
||||||
|
|
||||||
|
## 容量与测试资源收尾
|
||||||
|
|
||||||
|
测试机程序、发布目录和备份均落同一`/dev/sda2`根盘,没有独立数据盘。发布前后已用84166586368→86242967552字节,增加2076381184字节;最终可用13457821696字节,df使用率87%。
|
||||||
|
|
||||||
|
| 路径 | 发布前字节 | 发布后字节 | 保留原因 |
|
||||||
|
|---|---:|---:|---|
|
||||||
|
| /opt/cmpp-platform | 1030688768 | 1032572928 | 当前010ba32 |
|
||||||
|
| /opt/cmpp-releases | 13599055872 | 14703378432 | 候选、原产物/依赖、源包、阶段证据 |
|
||||||
|
| /var/backups/cmpp-platform | 8042622976 | 9034113024 | 两份独立恢复点及既有备份 |
|
||||||
|
| /var/log | 1025540096 | 1026125824 | 服务诊断日志 |
|
||||||
|
| /root/.npm | 698204160 | 722685952 | 依赖缓存 |
|
||||||
|
|
||||||
|
上一有效应用a350aca的previous-dist(43720704字节)及previous-source(1654784字节)位于第二轮发布目录;首轮previous-api-node_modules(587194368字节)、previous-api-dist(4771840字节)、previous-dist(42360832字节)对应cbc4a03恢复组件。首轮candidate-1789555279750741134为397352960字节;第二轮candidate-1789557047597611732为15458304字节。精确路径清单/占用见本地final-assets.log。当前/上一有效版本之外历史资产仍保留,容量治理未完成;未擅自删除备份、旧依赖或迁移目录。
|
||||||
|
|
||||||
|
本轮隔离应用cmu3z59t200031ple266tmprq及HTTP接口已停用,凭据revoked、Webhook端点disabled;两个模拟通道通过真实管理API停用并断链。模拟器7910、临时隧道、Webhook监听器、本轮启动的两个本地隔离PG集群均停止;临时hosts精确映射及清理timer已撤销。测试短信、账务、协议日志与审计保留,不改回余额,不删除业务证据。其他客户/通道配置未更改。
|
||||||
|
|
||||||
|
## 仍未验证的范围
|
||||||
|
|
||||||
|
TC-RC-01~12为综合矩阵,不能逐行笼统全部通过:两独立进程和旧租约fence、事务回滚/接续等已在真实隔离PG验证;目标环境已完成前述真实端到端,但未在所有生产消费者位置逐断点kill/restart,未等待真实72小时,未演练旧版恢复及全部历史脏数据组合。未执行修复前后同负载性能对照或持续容量压测,不能宣称CPU下降幅度/TPS。TC-RC-13即时应答竞态本地及目标补测通过。预生产验收完全未执行。
|
||||||
|
|
||||||
|
测试证据:`.local-data/five-fixes-20260916/{completion-final.log,immediate-before.log,immediate-after.log,go-all.log,go-vet.log,reconcile-final.log,count-diagnosis.log,cleanup-fixture.log,final-verification-detail.json,capacity-before.log,capacity-after.log,final-assets.log}`;标准计划/验证/报告在`.local-data/releases/`对应上述两计划目录。浏览器截图及受控脚本位于本机临时目录`cmpp-five-fixes-20260916`,不包含密码、Cookie或认证状态。测试脚本PASS文字已将“audited recovery”纠正为“isolated database recovery”,该恢复测试不代表人工恢复审计功能。
|
||||||
@@ -5610,3 +5610,7 @@ RC-01/02/04/08/09/10/11目前仅部分本地证据:三段齐段、重复与双
|
|||||||
### TC-RC-20260916-13 Gateway即时SubmitResp
|
### TC-RC-20260916-13 Gateway即时SubmitResp
|
||||||
|
|
||||||
真实TCP通道在收到每个Submit后立即回包,两种协议各500次;全部一次受理,不得丢应答后误报SUBMIT_TIMEOUT。目标环境补测多段消息,核对每段wire提交一次、唯一账单/最终业务通知;保留修复前2/4、1/3段异常与后继记录。本地修改前已复现,修复后重复5轮通过;目标环境补充发布待执行。
|
真实TCP通道在收到每个Submit后立即回包,两种协议各500次;全部一次受理,不得丢应答后误报SUBMIT_TIMEOUT。目标环境补测多段消息,核对每段wire提交一次、唯一账单/最终业务通知;保留修复前2/4、1/3段异常与后继记录。本地修改前已复现,修复后重复5轮通过;目标环境补充发布待执行。
|
||||||
|
|
||||||
|
### 2026-09-16 五项整改最终测试证据索引
|
||||||
|
|
||||||
|
TC-RC-20260916-01~12按[测试交付记录](release-20260916-test-completion.md)逐项区分真实目标链路、隔离PG故障验证及未执行场景,不能整组标全部通过。两段/三段/四段、补发成功/失败退款、20HTTP通知及9CMPP目标、503/超时自动恢复、无客户回执目标和无租户通道测试均有真实证据;全部逐断点退出/72小时/历史组合/旧版恢复/等负载性能对照未完成。TC-RC-13修复前真实TCP复现,修复后5000次即时响应及测试环境新增6条18分段无补发通过。五项运营页面检查包含三尺寸、请求失败保留真实快照与恢复、恢复告警不自动消失及人工清除审计。详细计数与测试资源收尾以交付记录为准。
|
||||||
|
|||||||
@@ -5099,3 +5099,13 @@ CUA本轮可用,实际后端文档三尺寸1600×1000/1366×768/390×844无页
|
|||||||
隔离真实HTTP/CMPP/Gateway/PostgreSQL/Redis验收已观察2/3/4段、乱序及重复回执、失败后唯一后继、最终失败退款、断线CMPP恢复9份客户分段回执、不申请回执不创建CMPP投递、Webhook TLS/503/超时后自动恢复。HTTP页面真实202及报文展示通过;无签名且含未报备链接的3段通道测试真实受理。监控实际恢复告警留存,故障注入保留最后真实快照并恢复刷新。完整对账及三尺寸页面/人工清除收尾仍在进行,不宣称全部通过。
|
隔离真实HTTP/CMPP/Gateway/PostgreSQL/Redis验收已观察2/3/4段、乱序及重复回执、失败后唯一后继、最终失败退款、断线CMPP恢复9份客户分段回执、不申请回执不创建CMPP投递、Webhook TLS/503/超时后自动恢复。HTTP页面真实202及报文展示通过;无签名且含未报备链接的3段通道测试真实受理。监控实际恢复告警留存,故障注入保留最后真实快照并恢复刷新。完整对账及三尺寸页面/人工清除收尾仍在进行,不宣称全部通过。
|
||||||
|
|
||||||
对账发现两条测试消息首尝试只提交2/4、1/3段后误判SUBMIT_TIMEOUT,各自动产生一个后继。已只读确认Gateway发送后登记pending的窗口;真实TCP在未修代码CMPP2.0第206次、3.0第7次复现,详见方案10.12。按同一mu→sendMu锁序保护写包和等待者登记;修复后两协议各500次×5轮共5000次即时应答通过,Gateway全量go test ./...与go vet ./...通过。需重新提交/标准部署该补充修复并新增目标环境样本验证;原异常保留,不将异常重试样本计为无重复发送通过。
|
对账发现两条测试消息首尝试只提交2/4、1/3段后误判SUBMIT_TIMEOUT,各自动产生一个后继。已只读确认Gateway发送后登记pending的窗口;真实TCP在未修代码CMPP2.0第206次、3.0第7次复现,详见方案10.12。按同一mu→sendMu锁序保护写包和等待者登记;修复后两协议各500次×5轮共5000次即时应答通过,Gateway全量go test ./...与go vet ./...通过。需重新提交/标准部署该补充修复并新增目标环境样本验证;原异常保留,不将异常重试样本计为无重复发送通过。
|
||||||
|
|
||||||
|
### 2026-09-16 19:20 五项整改测试交付收尾
|
||||||
|
|
||||||
|
本轮更名与五项实现已提交推送,测试最终应用010ba3216889032a6160cdb14d8536b616ae7102;首次a350aca验收发现即时SubmitResp误超时竞态,已补本地真实TCP复现/修复/全量Go门禁/标准第二次发布,新增6条2/3/4段全部一次提交成功。前端163项/API候选834项及生产构建通过,106迁移完成。
|
||||||
|
|
||||||
|
最终20条隔离业务短信加1条通道测试;20账单、20HTTP业务通知均完成,CMPP9份客户分段回执实际接收并ACK,不申请回执样本无CMPP目标;独立503及超时回调均自动恢复。修复前2条误超时自动补发保留为异常证据;最终24业务Submit/24耐久工作全部完成,三个Stream pending/lag均0,账户流水对齐。无签名/未报备链接3段通道测试delivered且不生成客户通知。监控三尺寸、真实快照失败保留/恢复、恢复告警留存和一次人工清除审计通过。
|
||||||
|
|
||||||
|
标准工具最终deployed-needs-review仅提示业务数量变化:119597/130835→119603/130841,精确对应补测6条/6次,已人工对账;版本/资源/服务及日志检查通过。工具businessAcceptance未自动更新,不改报告伪造完成。全部证据、原失败、耗时、恢复点、磁盘增量/治理未完成项及矩阵未覆盖项见[交付验收记录](release-20260916-test-completion.md)。预生产未操作,未做性能容量对照、真实72小时等待或全部逐断点/旧版恢复演练。
|
||||||
|
|
||||||
|
本轮专用应用/接口/凭据/Webhook和两个模拟通道已停用,模拟器/隧道/监听器/临时hosts/本地隔离PG停止或撤销;短信账务及审计数据保留。61项旧工作保护核对完成,共享文档/metrics只增本轮内容。最终收尾文档及测试日志标签修正单独提交推送,不重启应用。密码及会话不进入Git。
|
||||||
|
|||||||
@@ -562,7 +562,7 @@ try {
|
|||||||
const recoveredAlerts = await retainAlerts(db, [], new Date(Date.now() + 1));
|
const recoveredAlerts = await retainAlerts(db, [], new Date(Date.now() + 1));
|
||||||
assert(recoveredAlerts.some((item) => item.name === 'SmsCompletionNeedsReview' && item.status === 'resolved'));
|
assert(recoveredAlerts.some((item) => item.name === 'SmsCompletionNeedsReview' && item.status === 'resolved'));
|
||||||
pass(
|
pass(
|
||||||
'twelfth failure stops in needs_review and is a durable visible alert; audited recovery retains the resolved alert',
|
'twelfth failure stops in needs_review and is a durable visible alert; isolated database recovery retains the resolved alert',
|
||||||
);
|
);
|
||||||
|
|
||||||
const at = Date.now() + 10;
|
const at = Date.now() + 10;
|
||||||
|
|||||||
Reference in New Issue
Block a user