基线 origin/main 0c9b459。dispatchSend 在 PublishUp 返回错误时删掉 pending、把 inflight 清掉,然后直接 return。没有 regenerateSendLocked,也没有 finishSend,也没有把条目放回队列再泵。
origin/main
0c9b459
dispatchSend
PublishUp
inflight
return
regenerateSendLocked
finishSend
调用方的 Send 会一直等。若此时还没走到 OnOffline,重连后的 requeueInflightLocked 只处理仍标记为 inflight 的条目,这条会被跳过,或者之后按旧 rid 再发。K-00 要求每次重交使用新的 rid,并保留 id、body、send_at_ms。
Send
OnOffline
requeueInflightLocked
rid
id
body
send_at_ms
sdk/go/send.go
sdk/go/client.go
PublishUp 失败且未要求停止重连时:保留 id / body / send_at_ms,生成新 rid,清掉这次 inflight,并唤醒发送队列继续泵。已停止重连时才 finishSend 返回错误。不要在失败路径上静默 return。
补假传输测试:发布失败一次后,Send 不应永久挂起;重试载荷的 rid 必须变化,业务字段不变。
只改 sdk/go/。不要改 Python / Java / JS。偏差节 ### 复审修复 R3-04。
sdk/go/
### 复审修复 R3-04
已在分支 feat/fix-r3-68-go-sdk 修复(HEAD 9a588ce)。
feat/fix-r3-68-go-sdk
9a588ce
原因:dispatchSend 在 PublishUp 失败且未停止重连时删除 pending、清 inflight 后直接 return,既不 regenerateSendLocked 也不 drainSendQueue/finishSend,Send 永久挂起;重连时 requeueInflightLocked 也捡不回。
drainSendQueue
做法:未 stopReconnect 时保留 id/body/send_at_ms,换新 rid,清本次 inflight 并唤醒发送队列;已停止重连时 finishSend 返回错误。
stopReconnect
验证:go test ./...(sdk/go)通过;假传输发布失败一次后 Send 不挂起,重试 rid 变化、业务字段不变。
go test ./...
未合 main。
已合入 main:2415314 (#68);当前 origin/main HEAD 2d1dfd7。
2415314
2d1dfd7
No dependencies set.
The note is not visible to the blocked user.
现象
基线
origin/main0c9b459。dispatchSend在PublishUp返回错误时删掉 pending、把inflight清掉,然后直接return。没有regenerateSendLocked,也没有finishSend,也没有把条目放回队列再泵。调用方的
Send会一直等。若此时还没走到OnOffline,重连后的requeueInflightLocked只处理仍标记为 inflight 的条目,这条会被跳过,或者之后按旧rid再发。K-00 要求每次重交使用新的rid,并保留id、body、send_at_ms。位置
sdk/go/send.go:dispatchSend里PublishUp失败分支sdk/go/client.go的regenerateSendLocked/requeueInflightLocked方案
PublishUp失败且未要求停止重连时:保留id/body/send_at_ms,生成新rid,清掉这次 inflight,并唤醒发送队列继续泵。已停止重连时才finishSend返回错误。不要在失败路径上静默 return。补假传输测试:发布失败一次后,
Send不应永久挂起;重试载荷的rid必须变化,业务字段不变。约束
只改
sdk/go/。不要改 Python / Java / JS。偏差节### 复审修复 R3-04。已在分支
feat/fix-r3-68-go-sdk修复(HEAD9a588ce)。原因:
dispatchSend在PublishUp失败且未停止重连时删除 pending、清 inflight 后直接 return,既不regenerateSendLocked也不drainSendQueue/finishSend,Send永久挂起;重连时requeueInflightLocked也捡不回。做法:未
stopReconnect时保留 id/body/send_at_ms,换新 rid,清本次 inflight 并唤醒发送队列;已停止重连时finishSend返回错误。验证:
go test ./...(sdk/go)通过;假传输发布失败一次后 Send 不挂起,重试 rid 变化、业务字段不变。未合 main。
已合入 main:
2415314(#68);当前 origin/main HEAD2d1dfd7。