Why: Second-instance writes stay closed until an independent replay or an admitted CI gate, plus a second host. Those remaining steps needed a durable spec. Evidence: Task-card evidence rows read the merged PRs, tree equality, CI runs 2783/2810/2816, and Dev main branch protection. Source SELF. Drills were not run. Impact: Docs and the task card only. Checklist grades stay SELF or not started. The collaboration proposal body stays r2.3. Refs: docs/release-multi-instance.md Co-authored-by: Cursor <cursoragent@cursor.com>
55 lines
3.3 KiB
Markdown
55 lines
3.3 KiB
Markdown
# C4/C5 快速档接入 CI 的可行性(未改 workflow)
|
||
|
||
状态:只读评估。本次没有修改 `.gitea/workflows/ci.yaml`,没有在 `home-runner` 上执行演练,
|
||
也没有形成 GATE。第二实例写流量保持关闭。
|
||
|
||
## 平台准入(2026-10-13 只读)
|
||
|
||
Dev `main` 的分支保护由 API 读出,证据在任务卡 `.task/feature-u7-release-roadmap.md`,
|
||
来源 SELF:
|
||
|
||
- `enable_push` 为 false,`block_on_outdated_branch` 为 true
|
||
- `enable_status_check` 为 false,`status_check_contexts` 为空,`required_approvals` 为 0
|
||
|
||
这与 `policy/platform-admission.md` 在 2026-10-05 的观察一致,只说明配置当前如此。
|
||
它没有证明失败检查或陈旧候选会被拒绝。runner 隔离、token 权限和工作流来源本次没有核验。
|
||
|
||
因此,即便以后某个 job 变绿,在所有者按该文件完成准入之前,检查单不能把该次运行写成 GATE。
|
||
改分支保护属于高后果操作,本评估不准备执行命令。
|
||
|
||
## 现有 CI 能提供什么
|
||
|
||
`test-pg` 在 `ubuntu-latest` 上安装 PostgreSQL、pgvector 和 Redis,并以 root 容器、
|
||
无 sudo 为前提,用 `runuser` 或 `su` 切到 `postgres` 用户操作已有集群。
|
||
现有库端口是 5432,Redis 是 6399。演练端口 18980–18999 与这两个端口不重叠。
|
||
|
||
workflow 没有写 `timeout-minutes`。平台默认时限本次没有读取。
|
||
|
||
## 脚本直接放进 CI 时会碰到的差异
|
||
|
||
这些差异来自当前脚本和 workflow 文本。除资源数字外,都还没有在 `home-runner` 上实测。
|
||
|
||
1. **磁盘与负载门禁。** `tests/ops/lib.sh` 的 `ops_resource_gate` 要求可用空间至少
|
||
100GiB,且 load1 不超过 16,否则退出 3。作者机器在核验命令里打印了
|
||
`local_avail_kb=1164165728`、`local_id=1000`。这是作者主机,不是 runner。
|
||
runner 的磁盘和负载未测。未测通过前,job 不能假设自己过得了这道门。
|
||
2. **`pg_ctl` 的 PATH。** `tests/ops/run_backup_drill.sh` 用 `command -v pg_ctl`,
|
||
找不到就退出。`scripts/svc.sh` 的 `pg_bindir` 还会找 `pg_config --bindir` 和
|
||
`/usr/lib/postgresql/*/bin`。Ubuntu 包里的 `pg_ctl` 通常在版本目录,不一定在 PATH。
|
||
作者机器的 `pg_ctl` 来自 Homebrew,不能外推到 runner。
|
||
3. **root 下的 `initdb`。** 演练通过 `scripts/svc.sh db create` 调用 `initdb`。
|
||
workflow 写明运行器容器以 root 运行。PostgreSQL 的 `initdb` 拒绝 root。
|
||
`test-pg` 避开了这条路,它启动发行版集群再切到 `postgres` 用户。
|
||
本次没有在 runner 上执行 `initdb`。
|
||
4. **C5 的固定等待。** `run_backup_drill.sh` 把标记写入时长写成 `-dur 5m`,
|
||
恢复后还有 `sleep 120`。脚本没有快速档参数。K1–K7、工件 sha256 和跨用户 404 保持原判据。
|
||
缩短标记窗口需要改脚本,并仍能测出不超过 300 秒的 RPO。本次不改脚本。
|
||
5. **C4 的固定等待。** `run_fault_drill.sh --fault all` 含约 60 秒的断连窗口和若干秒级等待。
|
||
本次没有计时一次完整演练。
|
||
|
||
## 若以后要做 job
|
||
|
||
job 与现有 `test`、`test-pg`、`svc-realcombo` 并列。实现前先在 runner 上确认磁盘、
|
||
`pg_ctl` 位置,以及非 root 用户能否 `initdb`。通过后的证据要带运行链接、执行身份和完整 SHA。
|
||
平台准入未完成时,检查单的写法保持「CI 运行已绿,GATE 未成立」。
|