feat: 完善 RecordStream 的协议协商、运行观测与文档说明

- 将 RecordStream 出站路径收敛为单 writer loop
  - 支持在 batch header 中 piggyback AckSeq,保留独立 ack 作为兼容回退
  - 增加 record stream 打开阶段能力协商,支持 mixed-version peer 自动降级
  - 补充 RecordSnapshot 与 diagnostics summary 的 record-plane 观测项
  - 增加 batch/ack/error frame、piggyback ack、barrier 等待拆分与 apply backlog 指标
  - 收紧 TransportConn detach 后的 runtime snapshot 语义
  - 补充 README 中的 RecordStream 语义、兼容行为与诊断快照说明
  - 补充相关单测与 race 回归验证
This commit is contained in:
2026-04-15 19:52:45 +08:00
parent 09d972c7b7
commit 7ed3dd5b37
16 changed files with 1341 additions and 145 deletions
+46
View File
@@ -9,6 +9,7 @@
- 记录流数据面:`OpenRecordStream`
- 批量数据面:`OpenBulk``shared` / `dedicated`
- 文件传输内核:transfer control / progress / resume
- 观测面:runtime snapshot / diagnostics summary
- 会话模型:`LogicalConn`(逻辑会话)与 `TransportConn`(物理承载)分离
## 版本要求
@@ -82,6 +83,51 @@ func main() {
}
```
## RecordStream 说明
`RecordStream` 构建在 `Stream` 之上,适合“有边界的顺序记录”场景。
- 写入入口:`OpenRecordStream``WriteRecord`
- 接收入口:`ReadRecord`
- 确认入口:`AckRecord`
- 检查点:`Barrier``BarrierTo`
- 错误回包:`RecordFailure`
确认语义:
- `AckRecord` 表示“该序号及其之前的连续记录已完成 apply”,不是“已收到”
- `Barrier` / `BarrierTo` 等待的是对端 `apply-complete` 的最大连续序号
- `RecordFailure` 会返回 `FailedSeq``Code``Retryable``Message`
兼容与传输:
- record stream 在打开阶段协商 batch ack 能力
- 双端都支持时,累计 `AckSeq` 会随 batch header piggyback 发送
- 对端不支持时,自动回退到独立 ack frame
- mixed-version peer 可以互通,不要求双方同时升级
## 诊断快照
顶层诊断入口:
- `GetClientDiagnosticsSnapshot`
- `GetServerDiagnosticsSnapshot`
快照内容:
- 会话运行态:client / server runtime
- 数据面快照:`StreamSnapshot``BulkSnapshot``RecordSnapshot`
- 文件传输快照:`TransferSnapshot`
- 汇总视图:`DiagnosticsSummary`
`RecordSnapshot` / `DiagnosticsSummary.RecordTelemetry` 当前覆盖:
- batch / ack / error frame 收发计数
- piggyback ack 命中计数
- barrier 等待时间拆分:`flush` / `apply`
- `outstanding records/bytes`
- `pending apply / pending ack / peak pending apply`
## 传输与 IPC
- `tcp`