feat: 实现写入队列合并事务与 SAVEPOINT 隔离
This commit is contained in:
@@ -182,6 +182,22 @@
|
||||
- 备选方案:先关 listener、Drain、再 Shutdown。
|
||||
- 影响:有 MQTT 长连接后需 N/P 联调停机路径。
|
||||
|
||||
### P2 2026-09-30
|
||||
|
||||
1. **合并写入队列替换 T0.3 简单实现**
|
||||
- 原条款:DEVELOPMENT 7.2;TASKS P2。
|
||||
- 实际做法:单写 goroutine;批次上限 256 或等待 2ms;每操作用 `SAVEPOINT`/`ROLLBACK TO`/`RELEASE`;Begin/Commit/SAVEPOINT 基础设施失败返回 `errors.Join(ErrBusy, err)` 并令 `IsReady()=false`;业务操作错误只回滚该 SAVEPOINT,不标 busy。
|
||||
- 原因:满足每秒约 200 条写入的落盘合并需求。
|
||||
- 备选方案:按固定时间窗无条件合并。
|
||||
- 影响:调用方需用 `errors.Is(err, store.ErrBusy)` 映射协议 `busy`;`/readyz` 读 `DB.Ready`。
|
||||
|
||||
2. **调用方 context 取消与已入队任务**
|
||||
- 原条款:未规定入队后取消。
|
||||
- 实际做法:入队前检查 ctx;批次执行前再检查;若调用方在等待结果时取消,最多再等 30 秒取结果以免泄漏。
|
||||
- 原因:写 goroutine 仍可能已执行该操作,不能静默丢结果。
|
||||
- 备选方案:取消即从队列摘除(需可取消数据结构)。
|
||||
- 影响:极端取消场景下调用方可能多等一会儿。
|
||||
|
||||
## 连接 N
|
||||
|
||||
暂无。
|
||||
|
||||
Reference in New Issue
Block a user