fix: PublishUp 失败时换 rid 并继续泵发送队列
This commit is contained in:
@@ -3,6 +3,7 @@ package nixmsg
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
@@ -29,6 +30,8 @@ type FakeTransport struct {
|
||||
MaxFrameBytes int
|
||||
HelloDelay time.Duration
|
||||
ReceiveMaximumSet bool
|
||||
// failSendLeft 接下来若干次 type=send 的 PublishUp 返回错误(仍记入 up)。
|
||||
failSendLeft int
|
||||
}
|
||||
|
||||
type fakeConnect struct {
|
||||
@@ -65,6 +68,13 @@ func (f *FakeTransport) Start(ctx context.Context, cfg transportConfig) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// FailSendPublishN 让接下来 n 次 send 帧 PublishUp 失败(hello 等其它类型不受影响)。
|
||||
func (f *FakeTransport) FailSendPublishN(n int) {
|
||||
f.mu.Lock()
|
||||
f.failSendLeft = n
|
||||
f.mu.Unlock()
|
||||
}
|
||||
|
||||
func (f *FakeTransport) PublishUp(payload []byte) error {
|
||||
f.mu.Lock()
|
||||
cp := append([]byte(nil), payload...)
|
||||
@@ -80,6 +90,17 @@ func (f *FakeTransport) PublishUp(payload []byte) error {
|
||||
if auto && head.Type == "hello" && head.RID != "" {
|
||||
f.replyHello(head.RID)
|
||||
}
|
||||
if head.Type == "send" {
|
||||
f.mu.Lock()
|
||||
fail := f.failSendLeft > 0
|
||||
if fail {
|
||||
f.failSendLeft--
|
||||
}
|
||||
f.mu.Unlock()
|
||||
if fail {
|
||||
return errors.New("publish failed")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user