Stabilize QUIC pressure snapshots

This commit is contained in:
2026-05-16 12:55:48 +03:00
parent c64531d70c
commit 83a1bb67e2
2 changed files with 12 additions and 0 deletions
@@ -7,6 +7,7 @@ import (
"crypto/x509" "crypto/x509"
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"sort"
"strings" "strings"
"sync" "sync"
"time" "time"
@@ -412,6 +413,15 @@ func (t *QUICFabricTransport) Snapshot() QUICFabricTransportSnapshot {
snapshot.CapacityPressurePercent = (snapshot.ActiveStreams * 100) / capacity snapshot.CapacityPressurePercent = (snapshot.ActiveStreams * 100) / capacity
} }
} }
sort.Slice(snapshot.Connections, func(i, j int) bool {
if snapshot.Connections[i].PeerID != snapshot.Connections[j].PeerID {
return snapshot.Connections[i].PeerID < snapshot.Connections[j].PeerID
}
if snapshot.Connections[i].Endpoint != snapshot.Connections[j].Endpoint {
return snapshot.Connections[i].Endpoint < snapshot.Connections[j].Endpoint
}
return snapshot.Connections[i].CertSHA256 < snapshot.Connections[j].CertSHA256
})
return snapshot return snapshot
} }
@@ -427,6 +427,8 @@ QUIC fabric snapshots now include per cached connection pressure, endpoint, and
saturation state; VPN fabric endpoint ranking consumes that live local pressure saturation state; VPN fabric endpoint ranking consumes that live local pressure
before stream-limit rejection, spreading new sessions away from already busy before stream-limit rejection, spreading new sessions away from already busy
QUIC carriers. QUIC carriers.
Per-connection QUIC snapshot entries are sorted by peer and endpoint so
heartbeats and diagnostics stay stable across reports.
Endpoint ranking treats `capacity_limited` observations as a soft pressure Endpoint ranking treats `capacity_limited` observations as a soft pressure
penalty instead of a hard recent failure, enabling load spreading without penalty instead of a hard recent failure, enabling load spreading without
marking the carrier unhealthy. marking the carrier unhealthy.