From 8975184b88a75a692780bbd4d6b18f0a28e99819 Mon Sep 17 00:00:00 2001 From: ben-toogood Date: Fri, 18 Sep 2020 14:20:42 +0100 Subject: [PATCH] proxy/grpc: fix client streaming bug (EOF not sent to the server) (#2011) --- proxy/grpc/grpc.go | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/proxy/grpc/grpc.go b/proxy/grpc/grpc.go index c93f536b..04b18b8b 100644 --- a/proxy/grpc/grpc.go +++ b/proxy/grpc/grpc.go @@ -40,10 +40,8 @@ func readLoop(r server.Request, s client.Stream) error { // no need to decode it body, err := r.Read() if err == io.EOF { - return nil - } - - if err != nil { + return s.Close() + } else if err != nil { return err } @@ -55,11 +53,8 @@ func readLoop(r server.Request, s client.Stream) error { Body: body, } - // write the raw request - err = req.Codec().Write(msg, nil) - if err == io.EOF { - return nil - } else if err != nil { + // send the message to the stream + if err := req.Codec().Write(msg, nil); err != nil { return err } } @@ -168,8 +163,7 @@ func (p *Proxy) serveRequest(ctx context.Context, link client.Client, service, e // create client request read loop if streaming go func() { - err := readLoop(req, stream) - if err != nil && err != io.EOF { + if err := readLoop(req, stream); err != nil { // cancel the context cancel() }