Files
lisglosips/docs/S42_PHASE2_FREEZE_REPORT.md

108 lines
5.8 KiB
Markdown
Raw Permalink 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.
# S42 二期业务前缀基线冻结报告
## 1. 目标
冻结 LisgloSIPS V2 本地 KVM/Tailscale 环境中二期业务前缀、客户网关匹配、号码库、落地号码改写和真实话单接入后的当前可回滚基线。
本冻结不进入阿里云生产迁移,不替代未来生产环境的 VPC、安全组、正式 DNS/TLS、独立数据盘、备份恢复和灰度验收。
## 2. 冻结结论
当前 `s42-phase2-business-prefix-20260624140000` 具备冻结条件,可作为“二期业务前缀小样本联调基线”。
本冻结不包含真实 80 万手机号段导入,不包含生产式号码库压测,不包含浏览器登录态逐页按钮全量人工复测。
## 3. 冻结清单
| 项 | 当前值 |
| --- | --- |
| B current release | `/opt/lisglosips/releases/s42-phase2-business-prefix-20260624140000` |
| Redis active version | `1782286812696` |
| Redis previous version | `1782286145681` |
| A OpenSIPS cfg SHA-256 | `ae1544e9a39d2db114e6981babac042c2ab6d399d59ba597a52b85d597aa5aa5` |
| A Lua SHA-1 | `0b7ee595cdcad2f38a670dd8ff3553387820039e` |
| Prisma migrations | 4 条,B 当前库 `Database schema is up to date` |
| 最新 MySQL 备份 | `/data/backups/mysql/20260624T055810Z`SHA256 校验通过 |
| 最新 Redis 备份 | `/data/backups/redis/20260624T055810Z`SHA256 校验通过 |
| T 测试脚本 | `/opt/lisglosips-s28/lisglosips-s28-sip.py` |
## 4. 验证结果
本地代码验证:
- `corepack pnpm@10.33.0 typecheck` 通过。
- `corepack pnpm@10.33.0 lint` 通过。
- `corepack pnpm@10.33.0 build` 通过。
- `corepack pnpm@10.33.0 exec vitest run --hookTimeout=60000 --maxWorkers=1` 通过:25 个测试文件,87 条测试通过。
B 侧验证:
- `lisglosips@api``lisglosips@cdr-worker``lisglosips@recording-worker``lisglosips@config-publisher``nginx``mysql``redis-server``heplify-server``lisglosips-prometheus``grafana-server` 均为 `active`
- `https://127.0.0.1/api/v2/health/ready` 返回 `ok`
- `infra/server-b/s30/lisglosips-release-preflight.sh` 已补齐执行权限,直接执行通过。
- Redis `stream:cdr_deadletter` 长度为 26,抽样均为 2026-06-23 至 2026-06-24 早期修复前历史死信,包括 `config_version` INT 越界、旧占位外键失败、旧 `NO_POLICY` 事件;冻结验收实呼未新增 deadletter。
A 侧验证:
- `opensips``lisglosips-redis-auth-proxy``rtpengine``rtpengine-recording-daemon` 均为 `active`
- `opensips -C -f /etc/opensips/opensips.cfg` 通过。
- 历史 4 条 dialog 经 `dlg_end_dlg` 无法清理,返回 OpenSIPS MI `Operation failed`;已在语法检查通过后重启 `opensips` 清空。
- 冻结验收实呼后出现 1 条测试 dialog 残留;已再次语法检查并重启 `opensips`,最终 `dlg_list` 为空。
T 侧验证:
- `opensips``active`
- `100.93.185.30:5060``100.93.185.30:50620` 均在 UDP 监听。
端到端小样本呼叫:
- Call-ID`s28-1782288889943-ckv83lce@lisglosips-t`
- SIP`100 Giving it a try``200 OK`、BYE `200 OK`
- B raw CDR`raw_d5732df32b8d496686512870fb087232`
- 话单字段:`caller=s28-ip-1001``callee=13800138000``raw_callee=13800138000``business_prefix=NULL``landing_caller=s28-ip-1001``landing_callee=13800138000``sip_code=200``rating_status=RATED`
- 计费:客户费用 `0.012000`,供应商成本 `0.012000`
- CDR Worker`processed=1``deadlettered=0`
## 5. 已处理冻结前问题
1. 历史 dialog 残留:已通过重启 A OpenSIPS 清空,最终 `dlg_list` 为空。
2. CDR deadletter:未删除历史死信,已确认样本属于早期修复前历史事件;冻结验收呼叫未新增 deadletter。
3. B preflight 执行权限:已将 `/opt/lisglosips/current/infra/server-b/s30/lisglosips-release-preflight.sh` 权限修正为 `0755`,直接执行通过。
4. 全量 Vitest:初次使用默认 hook timeout 时 `app.e2e.spec.ts` 超时;使用 `--hookTimeout=60000` 后全量测试通过。
5. 冻结范围:明确不包含真实 80 万手机号段导入和浏览器登录态逐页按钮全量人工复测。
## 6. 回滚点
B 应用回滚:
```bash
sudo /opt/lisglosips/current/infra/server-b/s30/lisglosips-release-rollback.sh /opt/lisglosips/releases/s33-active-calls-20260623094000
```
Redis 配置回滚:
- 当前版本:`1782286812696`
- 上一版本:`1782286145681`
- 回滚时切回 `cfg:previous_version`,不删除 Stream 或 deadletter。
A OpenSIPS 回滚:
- 当前配置语法已通过,当前 Lua SHA 已记录。
- 若需回滚,使用最近一次 `/var/backups/lisglosips-phase2/` 下的 `opensips.cfg``lisglosips_hotpath.lua` 备份,先执行 `opensips -C -f /etc/opensips/opensips.cfg`,通过后重启 `opensips`
数据库回滚:
- 二期 migration 为向前兼容新增表/列,不建议执行破坏性 down migration。
- 若必须恢复数据,使用 `/data/backups/mysql/20260624T055810Z`,先恢复到隔离库验证后再进入维护窗口处理。
## 7. 遗留风险
- 真实 80 万手机号段尚未导入;号码库相关性能、Redis 快照体量和导入失败明细仍需单独验收。
- 浏览器登录态逐页按钮未做完整人工复测;本次只完成 API、构建、单元/集成测试和端到端小样本呼叫验证。
- OpenSIPS dialog 在测试呼叫结束后仍可能短期残留,当前通过重启清空。后续应单独分析 dialog 生命周期和 `dlg_end_dlg Operation failed` 的根因。
- 当前仍为本地 KVM/Tailscale 环境,开发 CA、Tailscale IP、本地根盘布局不能原样用于阿里云生产。
## 8. 结论
`s42-phase2-business-prefix-20260624140000` 可冻结为二期业务前缀小样本联调基线。后续需求或 Bug 修复应创建新的 release,不再覆盖该冻结点;阿里云迁移前仍需重新执行 S30 Runbook、备份恢复演练、正式网络/TLS 验收和灰度观察。