Files
Agent-System-Documents/docs/records/2026-10-12-u7-ops-drill-report.md
T
weichenandCursor 53354996f2 Record the K4 artifact retest in the collaboration plan
Why: the 2026-10-12 drill left artifact recovery failed, and the retest changed that SELF result without changing the write-traffic gate.
Evidence: backup-20261013-013354 on Dev a83588dd and backend 46073d30; K1-K7 true, RPO 65s, RTO 3s, five artifacts matched and cross-user access returned 404. SELF.
Impact: proposal moves to r2.3. Second-instance writes stay closed until REPLAY or CI and the second host exist.
Refs: docs/records/2026-10-12-u7-ops-drill-report.md docs/proposals/2026-10-11-collaboration-storage-and-distribution.md
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 01:44:03 +00:00

6.0 KiB
Raw Blame History

U7 运维演练与数据库基线报告(SELF,2026-10-12)

来源标注:SELF(本机隔离栈执行;非 CI GATE、非独立 REPLAY)。用户 2026-10-12 决定不做容量重放。不得据此放行第二实例写流量。

1. 被测对象

项 值
Backend gitlink 8e509775d39d1455b69be44803037faa7af844b4
B6 Dev HEAD b2e129ab3f3bdf222f16040fcd0513872d0e2a3c
C4 Dev HEAD 308f33665eb2dfaf9ae661e87df8898c3c2ecb3a
C5 Dev HEAD 792574692609d9bfdf113e2dc5af6f43c9a176dd
主机 32 逻辑 CPU,122 GiB RAM;演练开始时 load average 见各 host.txt
入口 tests/load/collaboration/run_pgbench.sh;tests/ops/run_fault_drill.sh;tests/ops/run_backup_drill.sh

原始输出在测量 worktree 的 results/(gitignore),不入库。任务卡 evidence 为 SELF。

2. B6 pgbench

结果目录 tests/load/collaboration/results/pgbench-20261012-131948。隔离实例 u7bench,scale 100,每档 60 秒,-M prepared。max_connections=100,superuser_reserved_connections=3,100 客户端封顶为 95。六档失败事务均为 0。

模式 客户端 tps P50 P95 P99
select-only 10 535646 0.018 ms 0.024 ms 0.030 ms
TPC-B 类 10 18798 0.339 ms 0.673 ms 5.560 ms
select-only 30 952115 0.026 ms 0.057 ms 0.078 ms
TPC-B 类 30 52224 0.493 ms 1.002 ms 1.777 ms
select-only 95 904708 0.087 ms 0.180 ms 0.417 ms
TPC-B 类 95 50607 1.041 ms 3.361 ms 18.106 ms

主机不空闲。这是数据库参考基线,没有业务阈值,也不替代容量窗口。

3. C4 断连

结果目录 tests/ops/results/fault-20261012-142734。PG 18991,应用 18990/18992,Redis 18993。

判据 pg-stop pg-kill
F1 有界失败、进程仍在 过 过
F2 不回落 SQLite,新进程拒绝就绪 过 过
F3 恢复后两侧各 5 次写入 过,RTO 不到 1 秒,未重启应用 同左
F4 失败 requestId 重放恰好一条 过 过
F5 dup_seq=0、seq 无洞、无非终态 run 过 过

Redis 限额 20 次/分钟,两实例各突发 40 个读:

判据 结果
G1 共享限额 放行 20、429 为 60、其他错误 0
G2 断连 放行 40、429 为 40、其他错误 0;已确认写入仍在
G3 只拉起 Redis 放行回到 20;rl:* 均有过期时间
G4 发现:日志看不到降级计数
G5 发现:Redis 不通时新进程拒绝启动

runtime.redisAddr 没有调用者可写的产品入口。演练用 SQL 写入默认 owner local 的 user 设置,并保留 mock。

4. C5 备份与恢复

结果目录 tests/ops/results/backup-20261012-153441。源 PG 18994,恢复目标 18997。合同数据量 seed 约 12 秒。

判据 结果
K1 备份有效 过。failed_count=0,archived_count=80,pg_verifybackup 与 pg_restore --list 退出码 0
K2 RPO≤5 分钟 过。64 秒
K3 RTO≤60 分钟 过。4 秒。恢复后登录、列项目、读会话均为 200
K4 工件与权限 FAIL。五次上传都没有拿到工件编号
K5 不变量 过。dup_seq=0,seq 无洞;恢复后消息/事件/知识/run 计数与故障前一致(消息 1 000 120);非终态 run 为 0
K6 逻辑恢复 过。pg_restore 退出码 0,约 4 秒;计数等于 dump 时快照(消息 1 000 000,知识 100 000)
K7 权限与泄密 过。备份目录 700、文件 600;结果文本里没有连接串。静态加密与凭据演练记 N/A。归档和数据在同一块盘,没有模拟存储全毁

恢复后的计数与故障前一致,说明已提交的标记都在。64 秒是最后一条成功标记的确认时间到故障时刻的间隔;窗口末尾有的写入因为会话仍被 mock run 占用而没有落库。

K4 的原因在源应用日志:未设置 BLOBSTORE_S3_ENDPOINT 时,NewS3FromEnv 返回空的 *S3。这个空指针被放进 blobstore.Store 接口后不再等于 nil,finishOpen 不会回落本地目录,上传在 blobstore.(*S3).Put 空指针 panic。产品代码未改。因此工件 sha256 和跨用户拒绝没有测成。代码里本地后端的 content_path 是绝对路径;这次没有成功上传,所以没有用恢复后的下载来核验。

同日另一次恢复(backup-20261012-150713)在数据目录复制之后起不来,因为 socket 路径超过 107 字节。正式这次把 socket 放到 /tmp/u7bk-18997。

5. 放行(2026-10-12 当时)

B6、C4 为 SELF 通过。C5 的库恢复为 SELF 通过,工件恢复失败。第二实例写流量仍不放行。

当时还没做、该任务不启动的三项:

  • 独立 REPLAY,或把 C4/C5 的快速档接进 CI 成为 GATE(需要平台准入)。
  • C3 双主机。
  • 上传在未配置对象存储时 panic,需要单独的产品修复后才能重测 K4。

6. 2026-10-13 K4 重测

上传 panic 已在 store 边界修复:带类型的空对象存储(未设置 BLOBSTORE_S3_ENDPOINT 时的 (*S3)(nil))视为未配置,回落本地工件目录。已构造的对象存储保持不变。Backend 提交 46073d30,Dev 被测头 a83588dd,backend gitlink 同为 46073d30。

重跑入口仍是 tests/ops/run_backup_drill.sh。结果目录 tests/ops/results/backup-20261013-013354(SELF)。原始结果另存于仓外 /home/weichen/projects/u7-k4-retest-preserved-20261013。

判据 结果
K1–K3、K5–K7 过。RPO 65 秒,RTO 3 秒。pg_verifybackup 与 pg_restore --list 退出码 0,逻辑恢复约 5 秒,恢复后计数与故障前一致
K4 工件与权限 过。5 个工件 checked=5、missing=0、mismatch=0。跨用户访问项目和工件均为 404

content_path 仍是绝对路径,快照继续还原到原目录。静态加密、凭据演练和整盘损坏仍是 N/A。

第二实例写流量仍不放行。剩下的门槛是独立 REPLAY 或经平台准入后的 C4/C5 CI 快速档,以及 C3 双主机。