ackhandler: track lost packets and detect spurious losses (#5355)

* ackhandler: implement a lost packet tracker

* logging: add ConnectionTracer.DetectedSpuriousLoss event

* ackhandler: detect spurious losses

* qlog: add support for logging spurious packet loss

* ackhandler: delete lost packets after detecting spurios loss

* guard against slice index underflow
This commit is contained in:
Marten Seemann
2025-10-03 15:59:50 +08:00
committed by GitHub
parent 0f5d99db94
commit 7c1ce0efe2
12 changed files with 379 additions and 0 deletions

View File

@@ -355,6 +355,23 @@ func (e eventPacketLost) MarshalJSONObject(enc *gojay.Encoder) {
enc.StringKey("trigger", e.Trigger.String())
}
type eventSpuriousLoss struct {
EncLevel protocol.EncryptionLevel
PacketNumber protocol.PacketNumber
Reordering uint64
Duration time.Duration
}
func (e eventSpuriousLoss) Name() string { return "recovery:spurious_loss" }
func (e eventSpuriousLoss) IsNil() bool { return false }
func (e eventSpuriousLoss) MarshalJSONObject(enc *gojay.Encoder) {
enc.StringKey("packet_number_space", encLevelToPacketNumberSpace(e.EncLevel))
enc.Uint64Key("packet_number", uint64(e.PacketNumber))
enc.Uint64Key("reordering_packets", e.Reordering)
enc.Float64Key("reordering_time", milliseconds(e.Duration))
}
type eventKeyUpdated struct {
Trigger keyUpdateTrigger
KeyType keyType