4.4 KiB
4.4 KiB
GB32960 旧来源基线重复累计修复与数据重算 — 2026-09-18
已部署 mileage-baseline-reset-20260918,修复实时统计和历史回补的基线选取,并在备份后重算受影响数据。
线上结果
| 车辆 | 日期 | 协议 | 修复后日里程 km | 说明 |
|---|---|---|---|---|
| 粤AGH6240 | 2026-09-08 | GB32960 | 0.2 | 原记录保留 |
| 粤AGH6240 | 2026-09-15 | GB32960 | 0 | 原 35042.9;改用 09-09 的 75429.6 基线,日末仍为 75429.6 |
| 粤AGH6240 | 2026-09-15 | JT808 | 0.1 | 未修改;中台默认去重选择该非零来源,因此默认页面结果为 0.1 |
| 粤AGG5043 | 2026-09-17 | GB32960 | 70.7 | 原 308.2 包含重复累计;42077 − 42006.3 = 70.7 |
这些结果已通过中台 HTTP 查询和公网开放接口验证;公网单日及区间分页都返回 NORMAL。此前将粤AGG5043 的 308.2 判为正确的结论已被本次完整基线核查纠正。
代码与规则
- GB32960 的总里程以 VIN 对应的车辆里程表为基准。旧转发来源恢复时,查找该车此前最新日期的有效来源记录(同来源或中台已选中的来源),同日优先采用已选中记录,避免因 IP 不同退回几个月前的基线。
- 实时 Writer 和 stats-backfill 共用修正后的数据库基线查询。回补同时检查窗口前的跨转发来源历史,与持久化日统计比较后采用较新的自然日基线。
- JT808、MQTT 保留原来的来源隔离。GPS 估算、协议未确认的历史导入和质量不通过的记录,不作为 GB32960 跨来源基线。
- 保留累计回退、负值抖动和按实际统计窗口计算的异常上限检查。
- 新增受控修复工具 mileage-baseline-repair:默认只读计划;应用时要求备份清单,逐条核验旧值和生产基线,在同一事务中更新来源记录及正式日统计,发现并发变化即回滚。
重算范围与备份
扫描 33,681 条有终端证据的 GB32960 来源记录,修正 304 辆车、1,268 条来源记录,重建 1,263 个车辆日结果。第一批 1,265 条,重投影后发现另外 3 条选源关联基线,一并修正;再次检查剩余候选为 0。没有改动原始报文或累计读数。
操作期间暂停统计 Writer 和相关定时任务,备份、重算及发布完成后已恢复。
备份目录:/opt/lingniu-go-native/backups/mileage-baseline-reset-20260918。
mileage-tables.sql.gz:两张里程统计表的一致性快照,32,438,655 bytes,gzip 完整性校验通过。- vehicle_daily_mileage:1,462,363 行;vehicle_daily_mileage_source:1,646,422 行。
- SHA-256:
f918217fa1d613fe6d70ef8fee3f8413ca8320f9d3cee8c1e6942a0d850898b2。 apply-plan-0.json、apply-plan-1.json保留逐行修改前内容与新基线。- 需要恢复时应在独立库还原备份并按受影响行清单恢复,不直接覆盖已恢复实时写入的整张生产表。
验证与已知限制
go test ./internal/stats ./cmd/stats-backfill ./cmd/stat-writer ./cmd/mileage-reproject通过。- 新增返回旧来源的 35042.9 重复累计、来源切换增量 70.7、累计回退仍异常、JT808 来源隔离等回归。
- 全量
go test ./...中,未修改的 internal/identity 包测试TestJT808RegistrationProjectorThrottlesLocationOnlyAfterPersist失败(throttled facts=1,预期 0),单独重试同样失败。该包未在本次更改或部署,不将全量测试报告为通过。 - 生产 Repository 验证覆盖 1,024 辆车、09-08~09-17 共 6,867 条结果,平台日统计差异 0、单日/区间差异 0;3 条 outside_daily_range 异常仍保留。
- 公网与中台 HTTP 实际响应保存在 http-verification.json;临时测试应用 75 已停用并清除车辆授权。
- 新 Writer readyz 正常,运行二进制 SHA 与发布产物一致;三协议各分区 Kafka lag=0,三个 worker 重试队列均为 0,发布后无 error 级日志。
- 中台默认“非零优先”的跨协议选择规则未改变,因此应在相同协议下比较中台与开放接口。BI 历史缓存未在本次清理。
发布
新目录:/opt/lingniu-go-native/releases/mileage-baseline-reset-20260918。
旧目录:/opt/lingniu-go-native/releases/mileage-reconciliation-20260916。
更新 stat-writer、stats-backfill,并附带修复工具;其他运行组件沿用原二进制。开放 API 继续使用已发布的中台日统计对齐逻辑,无须再次修改车辆日里程响应代码。