Skip to content

Commit 48ff62c

Browse files
RPC: Fix "err after streaming started" problem for batch (#2464)
1 parent 74473a6 commit 48ff62c

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

rpc/handler.go

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package rpc
1919
import (
2020
"context"
2121
"encoding/json"
22-
"fmt"
2322
"reflect"
2423
"strconv"
2524
"strings"
@@ -173,7 +172,9 @@ func (h *handler) handleBatch(msgs []*jsonrpcMessage, stream *jsoniter.Stream) {
173172
if cb != nil && cb.streamable { // cb == nil: means no such method and this case is thread-safe
174173
batchStream := jsoniter.NewStream(jsoniter.ConfigDefault, nil, 4096)
175174
response = h.handleCallMsg(cp, calls[i], batchStream)
176-
writeToStream(batchStream.Buffer())
175+
if response == nil {
176+
writeToStream(batchStream.Buffer())
177+
}
177178
} else {
178179
response = h.handleCallMsg(cp, calls[i], stream)
179180
}
@@ -489,31 +490,34 @@ func (h *handler) runMethod(ctx context.Context, msg *jsonrpcMessage, callb *cal
489490
stream.WriteObjectField("result")
490491
_, err := callb.call(ctx, msg.Method, args, stream)
491492
if err != nil {
492-
stream.WriteMore()
493-
stream.WriteObjectField("error")
494-
stream.WriteObjectStart()
495-
stream.WriteObjectField("code")
496-
ec, ok := err.(Error)
497-
if ok {
498-
stream.WriteInt(ec.ErrorCode())
499-
} else {
500-
stream.WriteInt(defaultErrorCode)
501-
}
502-
stream.WriteMore()
503-
stream.WriteObjectField("message")
504-
stream.WriteString(fmt.Sprintf("%v", err))
505-
de, ok := err.(DataError)
506-
if ok {
493+
return msg.errorResponse(err)
494+
/*
507495
stream.WriteMore()
508-
stream.WriteObjectField("data")
509-
data, derr := json.Marshal(de.ErrorData())
510-
if derr == nil {
511-
stream.Write(data)
496+
stream.WriteObjectField("error")
497+
stream.WriteObjectStart()
498+
stream.WriteObjectField("code")
499+
ec, ok := err.(Error)
500+
if ok {
501+
stream.WriteInt(ec.ErrorCode())
512502
} else {
513-
stream.WriteString(fmt.Sprintf("%v", derr))
503+
stream.WriteInt(defaultErrorCode)
514504
}
515-
}
516-
stream.WriteObjectEnd()
505+
stream.WriteMore()
506+
stream.WriteObjectField("message")
507+
stream.WriteString(fmt.Sprintf("%v", err))
508+
de, ok := err.(DataError)
509+
if ok {
510+
stream.WriteMore()
511+
stream.WriteObjectField("data")
512+
data, derr := json.Marshal(de.ErrorData())
513+
if derr == nil {
514+
stream.Write(data)
515+
} else {
516+
stream.WriteString(fmt.Sprintf("%v", derr))
517+
}
518+
}
519+
stream.WriteObjectEnd()
520+
*/
517521
}
518522
stream.WriteObjectEnd()
519523
stream.Flush()

0 commit comments

Comments
 (0)