proxy/grpc: fix client streaming bug (EOF not sent to the server) (#2011)
This commit is contained in:
@@ -40,10 +40,8 @@ func readLoop(r server.Request, s client.Stream) error {
|
|||||||
// no need to decode it
|
// no need to decode it
|
||||||
body, err := r.Read()
|
body, err := r.Read()
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
return nil
|
return s.Close()
|
||||||
}
|
} else if err != nil {
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,11 +53,8 @@ func readLoop(r server.Request, s client.Stream) error {
|
|||||||
Body: body,
|
Body: body,
|
||||||
}
|
}
|
||||||
|
|
||||||
// write the raw request
|
// send the message to the stream
|
||||||
err = req.Codec().Write(msg, nil)
|
if err := req.Codec().Write(msg, nil); err != nil {
|
||||||
if err == io.EOF {
|
|
||||||
return nil
|
|
||||||
} else if err != nil {
|
|
||||||
return err
|
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
|
// create client request read loop if streaming
|
||||||
go func() {
|
go func() {
|
||||||
err := readLoop(req, stream)
|
if err := readLoop(req, stream); err != nil {
|
||||||
if err != nil && err != io.EOF {
|
|
||||||
// cancel the context
|
// cancel the context
|
||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user