Skip to content

Commit 3f8df3e

Browse files
committed
reuse serviceinfo.StreamingMode
1 parent cbdff65 commit 3f8df3e

File tree

7 files changed

+69
-19
lines changed

7 files changed

+69
-19
lines changed

client/stream.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func (kc *kClient) Stream(ctx context.Context, method string, request, response
5252
ctx, ri, _ = kc.initRPCInfo(ctx, method, 0, nil)
5353

5454
rpcinfo.AsMutableRPCConfig(ri.Config()).SetInteractionMode(rpcinfo.Streaming)
55-
rpcinfo.AsMutableRPCConfig(ri.Config()).SetStreamingMode(rpcinfo.StreamingMode(kc.getStreamingMode(ri)))
55+
rpcinfo.AsMutableRPCConfig(ri.Config()).SetStreamingMode(kc.getStreamingMode(ri))
5656
ctx = rpcinfo.NewCtxWithRPCInfo(ctx, ri)
5757

5858
ctx = kc.opt.TracerCtl.DoStart(ctx, ri)

client/stream_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package client
1919
import (
2020
"context"
2121
"errors"
22+
"github.com/cloudwego/kitex/pkg/endpoint"
2223
"io"
2324
"testing"
2425

@@ -637,3 +638,62 @@ func Test_isRPCError(t *testing.T) {
637638
test.Assert(t, isRPCError(errors.New("error")))
638639
})
639640
}
641+
642+
func Test_kClient_Stream_SetStreamingMode(t *testing.T) {
643+
testcases := []struct {
644+
method string
645+
mode serviceinfo.StreamingMode
646+
}{
647+
{
648+
method: "None",
649+
mode: serviceinfo.StreamingNone,
650+
},
651+
{
652+
method: "Unary",
653+
mode: serviceinfo.StreamingUnary,
654+
},
655+
{
656+
method: "ClientStreaming",
657+
mode: serviceinfo.StreamingClient,
658+
},
659+
{
660+
method: "ServerStreaming",
661+
mode: serviceinfo.StreamingServer,
662+
},
663+
{
664+
method: "BidiStreaming",
665+
mode: serviceinfo.StreamingBidirectional,
666+
},
667+
}
668+
info := &serviceinfo.ServiceInfo{Methods: make(map[string]serviceinfo.MethodInfo)}
669+
for _, tc := range testcases {
670+
info.Methods[tc.method] = serviceinfo.NewMethodInfo(
671+
nil, nil, nil, false,
672+
serviceinfo.WithStreamingMode(tc.mode),
673+
)
674+
}
675+
676+
for _, tc := range testcases {
677+
t.Run(tc.method, func(t *testing.T) {
678+
ctrl := gomock.NewController(t)
679+
defer ctrl.Finish()
680+
opts := append(newOpts(ctrl), WithMiddleware(func(next endpoint.Endpoint) endpoint.Endpoint {
681+
return func(ctx context.Context, req, resp interface{}) (err error) {
682+
ri := rpcinfo.GetRPCInfo(ctx)
683+
test.Assert(t, ri.Config().StreamingMode() == tc.mode)
684+
return nil
685+
}
686+
}))
687+
688+
kc := &kClient{
689+
opt: client.NewOptions(opts),
690+
svcInfo: info,
691+
}
692+
693+
_ = kc.init()
694+
695+
err := kc.Stream(context.Background(), tc.method, req, resp)
696+
test.Assert(t, err == nil, err)
697+
})
698+
}
699+
}

pkg/remote/codec/grpc/grpc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func (c *grpcCodec) Decode(ctx context.Context, message remote.Message, in remot
179179
d, err := decodeGRPCFrame(ctx, in)
180180
// For ClientStreaming, server may return an err(e.g. status) as trailer frame after calling SendAndClose.
181181
// We need to receive this trailer frame.
182-
if message.RPCInfo().Config().StreamingMode() == rpcinfo.ClientStreaming && message.RPCRole() == remote.Client && err == nil {
182+
if message.RPCInfo().Config().StreamingMode() == serviceinfo.StreamingClient && message.RPCRole() == remote.Client && err == nil {
183183
// Receive trailer frame
184184
// If err == nil, wrong gRPC protocol implementation.
185185
// If err == io.EOF, it means server returns nil, just ignore io.EOF.

pkg/rpcinfo/interface.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ type RPCConfig interface {
8080
TransportProtocol() transport.Protocol
8181
InteractionMode() InteractionMode
8282
PayloadCodec() serviceinfo.PayloadCodec
83-
StreamingMode() StreamingMode
83+
StreamingMode() serviceinfo.StreamingMode
8484
}
8585

8686
// Invocation contains specific information about the call.

pkg/rpcinfo/mocks_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ type MockRPCConfig struct {
3636
IOBufferSizeFunc func() (r int)
3737
TransportProtocolFunc func() transport.Protocol
3838
InteractionModeFunc func() (r rpcinfo.InteractionMode)
39-
StreamingModeFunc func() (r rpcinfo.StreamingMode)
39+
StreamingModeFunc func() (r serviceinfo.StreamingMode)
4040
}
4141

4242
func (m *MockRPCConfig) PayloadCodec() serviceinfo.PayloadCodec {
@@ -91,7 +91,7 @@ func (m *MockRPCConfig) TransportProtocol() (r transport.Protocol) {
9191
return
9292
}
9393

94-
func (m *MockRPCConfig) StreamingMode() (r rpcinfo.StreamingMode) {
94+
func (m *MockRPCConfig) StreamingMode() (r serviceinfo.StreamingMode) {
9595
if m.StreamingModeFunc != nil {
9696
return m.StreamingModeFunc()
9797
}

pkg/rpcinfo/mutable.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ type MutableRPCConfig interface {
5252
CopyFrom(from RPCConfig)
5353
ImmutableView() RPCConfig
5454
SetPayloadCodec(codec serviceinfo.PayloadCodec)
55-
SetStreamingMode(mode StreamingMode)
55+
SetStreamingMode(mode serviceinfo.StreamingMode)
5656
}
5757

5858
// MutableRPCStats is used to change the information in the RPCStats.

pkg/rpcinfo/rpcconfig.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,6 @@ const (
5656
Streaming InteractionMode = 2
5757
)
5858

59-
type StreamingMode int32
60-
61-
const (
62-
None StreamingMode = 0b0000
63-
Unary StreamingMode = 0b0001
64-
ClientStreaming StreamingMode = 0b0010
65-
ServerStreaming StreamingMode = 0b0100
66-
BidirectionalStreaming StreamingMode = 0b0110
67-
)
68-
6959
// rpcConfig is a set of configurations used during RPC calls.
7060
type rpcConfig struct {
7161
readOnlyMask int
@@ -76,7 +66,7 @@ type rpcConfig struct {
7666
transportProtocol transport.Protocol
7767
interactionMode InteractionMode
7868
payloadCodec serviceinfo.PayloadCodec
79-
streamingMode StreamingMode
69+
streamingMode serviceinfo.StreamingMode
8070
}
8171

8272
func init() {
@@ -204,11 +194,11 @@ func (r *rpcConfig) PayloadCodec() serviceinfo.PayloadCodec {
204194
return r.payloadCodec
205195
}
206196

207-
func (r *rpcConfig) SetStreamingMode(mode StreamingMode) {
197+
func (r *rpcConfig) SetStreamingMode(mode serviceinfo.StreamingMode) {
208198
r.streamingMode = mode
209199
}
210200

211-
func (r *rpcConfig) StreamingMode() StreamingMode {
201+
func (r *rpcConfig) StreamingMode() serviceinfo.StreamingMode {
212202
return r.streamingMode
213203
}
214204

0 commit comments

Comments
 (0)