fix: PublishUp 失败时换 rid 并继续泵发送队列
This commit is contained in:
@@ -1738,3 +1738,12 @@ issue #3 未关闭,`feat/fix-3-downlink-deadlock` 未合入 `main`。下面是
|
||||
- 原因:通道满时并发 Do 占着读锁堵在发送上,Close 的写锁拿不到,停机卡死;未提交的在途写也会丢。
|
||||
- 备选方案:入队改为非阻塞,满则立即 ErrBusy(否决:改变背压语义,正常高峰会误伤提交)。
|
||||
- 影响:仅 internal/store/queue.go 与测试;不改迁移编号。
|
||||
|
||||
### 复审修复 R3-04
|
||||
|
||||
- 日期:2026-09-30
|
||||
- 原条款:Gitea #68;`dispatchSend` 在 `PublishUp` 失败且未停止重连时清 inflight 后静默 return,`Send` 永久挂起。
|
||||
- 实际做法:失败且未 `stopReconnect` 时保留 id/body/send_at_ms,经 `regenerateSendLocked` 换新 rid,清本次 inflight 并 `drainSendQueue` 继续泵;已停止重连时仍 `finishSend` 返回错误。
|
||||
- 原因:条目已不在途,重连时的 `requeueInflightLocked` 不会捡回,调用方一直等 `result`。
|
||||
- 备选方案:失败即 `finishSend` 报错(否决,与断线/限速重交语义不一致);只换 rid 不唤醒队列(否决,等同 JS #69)。
|
||||
- 影响:仅 `sdk/go`;假传输可模拟 send 发布失败一次。
|
||||
|
||||
Reference in New Issue
Block a user