New Features
Prometheus
quic-go now exports a few Prometheus metrics, allowing users to get an aggregate picture of what's going on inside their QUIC stack. Currently, only a basic set of metrics is exposed, but we plan to track more metrics in the future (#4554). Head to the documentation to learn how to enable metrics collection.
Prometheus metrics can be used (among others) to build Grafana dashboards, and we provide a sample Grafana dashboard in metrics/dashboard.
Tracing Handshake Progression using a custom context.Context
Users can now set and modify the context that's used on all callbacks called during the handshake, and returned from Connection.Context
(#4507 and #4536). This allows identifying the connection as it progresses through the different handshake stages. The documentation has more details and code samples.
Better Path MTU Discovery
Path MTU Discovery is used to automatically determine the available MTU of the path, which allows us to send full-size packets. This is especially relevant for high-bandwidth transfers.
Our old PMTUD algorithm was susceptible to packet loss, leading to suboptimal results if an MTU probe packet experienced packet loss in the network. The new algorithm (#4545) is now resilient to the consecutive loss of up to two probe packets.
Breaking Changes
Connection.NextConnection
now takes a context and correctly handles handshake failures (#4551)- qlog:
DefaultTracer
was renamed toDefaultConnectionTracer
(#4556) - The
ConnectionTracingKey
is now deprecated. UseTransport.ConnContext
to set your own tracing key (#4532)
Fixes
- The server now correctly restores its QUIC transport parameters when resuming 0-RTT using a
tls.Config
that setsGetConfigForClient
: (#4550)
Changelog
- introduce Transport.ConnContext, use client's context on the connection by @marten-seemann in #4507
- deprecate the ConnectionTracingKey by @marten-seemann in #4532
- http3: fix flaky Extended CONNECT unit test by @marten-seemann in #4537
- remove unneeded stream context cancellation on shutdown by @marten-seemann in #4535
- ci: set timeout for jobs by @marten-seemann in #4538
- http3: fix another flaky Extended CONNECT test by @marten-seemann in #4539
- remove unused SetMax method of the mtuDiscoverer by @marten-seemann in #4543
- http3: use the connection, not the stream context, on the server side by @marten-seemann in #4510
- use a chan instead of a context to track handshake completion by @marten-seemann in #4547
- remove unused function parameter from qtls.SetupConfigForServer by @marten-seemann in #4549
- fix the server's 0-RTT rejection logic when using GetConfigForClient by @marten-seemann in #4550
- add some Prometheus metrics by @marten-seemann in #4534
- make Path MTU Discovery resilient to random packet loss by @marten-seemann in #4545
- add context to EarlyConnection.NextConnection, handle handshake failures by @marten-seemann in #4551
- pass a context to Transport.ConnContext by @marten-seemann in #4536
- metrics: simplify constructor for the default connection tracer by @marten-seemann in #4555
- qlog: rename DefaultTracer to DefaultConnectionTracer by @marten-seemann in #4556
- fix incorrect documentation for Config.DisablePathMTUDiscovery by @marten-seemann in #4558
- metrics: add an example Grafana dashboard by @marten-seemann in #4559
Full Changelog: v0.44.0...v0.45.0