Skip to content

x/net/http2: discrepancies in lost PING handling between Server and Transport #69963

Closed
@mmatczuk

Description

@mmatczuk

Go version

x/net v0.30.0

Output of go env in your module/workspace:

Not important.

What did you do?

I configured http2.Server with

  • ReadIdleTimeout
  • PingTimeout
  • CountError

and caused PING to be lost.

What did you see happen?

The newly added support for lost PING in server:

  • only logs lost ping in verbose mode while closes the underlying connection - IMO should be logged always
  • does not invoke CountError
if sc.pingSent {
    sc.vlogf("timeout waiting for PING response")
    sc.conn.Close()
    return
}

https://cs.opensource.google/go/x/net/+/refs/tags/v0.30.0:http2/server.go;l=1047

vs

func (cc *ClientConn) closeForLostPing() {
	err := errors.New("http2: client connection lost")
	if f := cc.t.CountError; f != nil {
		f("conn_close_lost_ping")
	}
	cc.closeForError(err)
}

https://cs.opensource.google/go/x/net/+/refs/tags/v0.30.0:http2/transport.go;l=1159

What did you expect to see?

I expect to see

  • ErrorLog called with lost ping message
  • CountError called with conn_close_lost_ping

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsFixThe path to resolution is known, but the work has not been done.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions