Skip to content

wrong usage of gRPC interface #9390

@lance6716

Description

@lance6716

I see stack is attached to raw gRPC error io.EOF when client is closed

pd/server/grpc_service.go

Lines 1045 to 1052 in f18af79

func (b *bucketHeartbeatServer) recv() (*pdpb.ReportBucketsRequest, error) {
if atomic.LoadInt32(&b.closed) == 1 {
return nil, io.EOF
}
req, err := b.stream.Recv()
if err != nil {
atomic.StoreInt32(&b.closed, 1)
return nil, errors.WithStack(err)

but at caller it directly compares with io.EOF, so the extra stack fails the comparison

pd/server/grpc_service.go

Lines 1079 to 1084 in f18af79

request, err := server.recv()
failpoint.Inject("grpcClientClosed", func() {
err = errs.ErrStreamClosed
request = nil
})
if err == io.EOF {

Metadata

Metadata

Assignees

No one assigned

    Labels

    type/developmentThe issue belongs to a development tasks

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions