Skip to content

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

@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

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

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions