Skip to content

Commit bf39e92

Browse files
committed
fix: add internal error handle , fix inaccurate PublishErrorsMsgTooLarge metric.
1 parent fce5491 commit bf39e92

3 files changed

Lines changed: 22 additions & 3 deletions

File tree

pulsar/internal/commands.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ var ErrEOM = errors.New("EOF")
5050

5151
var ErrConnectionClosed = errors.New("connection closed")
5252

53+
var ErrExceedMaxMessageSize = errors.New("encryptedPayload exceeds MaxMessageSize")
54+
5355
func NewMessageReader(headersAndPayload Buffer) *MessageReader {
5456
return &MessageReader{
5557
buffer: headersAndPayload,
@@ -265,8 +267,8 @@ func serializeMessage(wb Buffer,
265267
}
266268
// the maxMessageSize check of batching message is in here
267269
if len(encryptedPayload) > int(maxMessageSize) {
268-
return fmt.Errorf("encryptedPayload size exceeds MaxMessageSize, size: %d, MaxMessageSize: %d",
269-
len(encryptedPayload), maxMessageSize)
270+
return fmt.Errorf("%w, size: %d, MaxMessageSize: %d",
271+
ErrExceedMaxMessageSize, len(encryptedPayload), maxMessageSize)
270272
}
271273

272274
cmdSize := uint32(proto.Size(cmdSend))

pulsar/producer_partition.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,10 @@ func (p *partitionProducer) Send(ctx context.Context, msg *ProducerMessage) (Mes
993993

994994
// wait for send request to finish
995995
<-doneCh
996+
997+
// handle internal error
998+
p.internalErrHandle(err)
999+
9961000
return msgID, err
9971001
}
9981002

@@ -1237,3 +1241,15 @@ func (p *partitionProducer) canAddToQueue(sr *sendRequest) bool {
12371241
p.metrics.BytesPending.Add(float64(len(sr.msg.Payload)))
12381242
return true
12391243
}
1244+
1245+
func (p *partitionProducer) internalErrHandle(err error) {
1246+
if err == nil {
1247+
return
1248+
} else if errors.Is(err, internal.ErrExceedMaxMessageSize) {
1249+
p.log.WithError(errMessageTooLarge).
1250+
Errorf("internal err: %s", err)
1251+
p.metrics.PublishErrorsMsgTooLarge.Inc()
1252+
return
1253+
}
1254+
// other internal error can be handled here
1255+
}

pulsar/producer_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package pulsar
1919

2020
import (
2121
"context"
22+
"errors"
2223
"fmt"
2324
"net/http"
2425
"strconv"
@@ -958,7 +959,7 @@ func TestMaxMessageSize(t *testing.T) {
958959
Payload: payload,
959960
})
960961
if bias <= 0 {
961-
assert.Error(t, err)
962+
assert.Equal(t, true, errors.Is(err, internal.ErrExceedMaxMessageSize))
962963
assert.Nil(t, ID)
963964
} else {
964965
assert.Equal(t, errMessageTooLarge, err)

0 commit comments

Comments
 (0)