diff --git a/pkg/remote/trans/nphttp2/grpc/http2_server.go b/pkg/remote/trans/nphttp2/grpc/http2_server.go index c2b84efe13..b450d9a30e 100644 --- a/pkg/remote/trans/nphttp2/grpc/http2_server.go +++ b/pkg/remote/trans/nphttp2/grpc/http2_server.go @@ -550,6 +550,7 @@ func (t *http2Server) handleData(f *grpcframe.DataFrame) { return } if size > 0 { + s.isReceiveFromClient = true if err := s.fc.onData(size); err != nil { t.closeStream(s, true, http2.ErrCodeFlowControl, false) return @@ -570,6 +571,14 @@ func (t *http2Server) handleData(f *grpcframe.DataFrame) { } } if f.Header().Flags.Has(http2.FlagDataEndStream) { + if !s.isReceiveFromClient { + md, ctxOK := metadata.FromIncomingContext(s.ctx) + if ctxOK { + klog.CtxInfof(s.ctx, "receive EOS flag directly, md: %+v", md) + } else { + klog.CtxInfof(s.ctx, "receive EOS flag directly") + } + } // Received the end of stream from the client. s.compareAndSwapState(streamActive, streamReadDone) s.write(recvMsg{err: io.EOF}) diff --git a/pkg/remote/trans/nphttp2/grpc/transport.go b/pkg/remote/trans/nphttp2/grpc/transport.go index e2b5f0ef1f..b672ba67ac 100644 --- a/pkg/remote/trans/nphttp2/grpc/transport.go +++ b/pkg/remote/trans/nphttp2/grpc/transport.go @@ -285,6 +285,8 @@ type Stream struct { // contentSubtype is the content-subtype for requests. // this must be lowercase or the behavior is undefined. contentSubtype string + + isReceiveFromClient bool // indicates whether receiving data from the client } // isHeaderSent is only valid on the server-side.