use default RTT (100ms) for 0-RTT if no prior estimate (#5388)

* utils: initialize the {Smoothed, Latest, Min}RTT to 100ms

* utils: use time.Duration.Nanoseconds instead of uint64

No functional change expected.

* congestion: better check to avoid division by zero
This commit is contained in:
Marten Seemann
2025-10-16 15:32:46 +08:00
committed by GitHub
parent 5e5100b40c
commit 42b198b8d1
14 changed files with 157 additions and 143 deletions

View File

@@ -17,7 +17,7 @@ func TestConnectionFlowControlWindowUpdate(t *testing.T) {
100, // initial receive window
100, // max receive window
nil,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
require.False(t, fc.AddBytesRead(1))
@@ -28,7 +28,7 @@ func TestConnectionFlowControlWindowUpdate(t *testing.T) {
func TestConnectionWindowAutoTuningNotAllowed(t *testing.T) {
// the RTT is 1 second
rttStats := &utils.RTTStats{}
rttStats := utils.NewRTTStats()
rttStats.UpdateRTT(time.Second, 0)
require.Equal(t, time.Second, rttStats.SmoothedRTT())
@@ -52,7 +52,7 @@ func TestConnectionWindowAutoTuningNotAllowed(t *testing.T) {
}
func TestConnectionFlowControlViolation(t *testing.T) {
fc := NewConnectionFlowController(100, 100, nil, &utils.RTTStats{}, utils.DefaultLogger)
fc := NewConnectionFlowController(100, 100, nil, utils.NewRTTStats(), utils.DefaultLogger)
require.NoError(t, fc.IncrementHighestReceived(40, monotime.Now()))
require.NoError(t, fc.IncrementHighestReceived(60, monotime.Now()))
err := fc.IncrementHighestReceived(1, monotime.Now())
@@ -62,7 +62,7 @@ func TestConnectionFlowControlViolation(t *testing.T) {
}
func TestConnectionFlowControllerReset(t *testing.T) {
fc := NewConnectionFlowController(0, 0, nil, &utils.RTTStats{}, utils.DefaultLogger)
fc := NewConnectionFlowController(0, 0, nil, utils.NewRTTStats(), utils.DefaultLogger)
fc.UpdateSendWindow(100)
fc.AddBytesSent(10)
require.Equal(t, protocol.ByteCount(90), fc.SendWindowSize())
@@ -71,7 +71,7 @@ func TestConnectionFlowControllerReset(t *testing.T) {
}
func TestConnectionFlowControllerResetAfterReading(t *testing.T) {
fc := NewConnectionFlowController(0, 0, nil, &utils.RTTStats{}, utils.DefaultLogger)
fc := NewConnectionFlowController(0, 0, nil, utils.NewRTTStats(), utils.DefaultLogger)
fc.AddBytesRead(1)
require.EqualError(t, fc.Reset(), "flow controller reset after reading data")
}

View File

@@ -19,13 +19,13 @@ func TestStreamFlowControlReceiving(t *testing.T) {
protocol.MaxByteCount,
protocol.MaxByteCount,
nil,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
),
100,
protocol.MaxByteCount,
protocol.MaxByteCount,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
@@ -52,13 +52,13 @@ func TestStreamFlowControllerFinalOffset(t *testing.T) {
protocol.MaxByteCount,
protocol.MaxByteCount,
nil,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
),
protocol.MaxByteCount,
protocol.MaxByteCount,
protocol.MaxByteCount,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
}
@@ -109,7 +109,7 @@ func TestStreamAbandoning(t *testing.T) {
100,
protocol.MaxByteCount,
nil,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
require.True(t, connFC.UpdateSendWindow(300))
@@ -119,7 +119,7 @@ func TestStreamAbandoning(t *testing.T) {
60,
protocol.MaxByteCount,
100,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
@@ -140,7 +140,7 @@ func TestStreamSendWindow(t *testing.T) {
protocol.MaxByteCount,
protocol.MaxByteCount,
nil,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
require.True(t, connFC.UpdateSendWindow(300))
@@ -150,7 +150,7 @@ func TestStreamSendWindow(t *testing.T) {
protocol.MaxByteCount,
protocol.MaxByteCount,
100,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
// first, we're limited by the stream flow controller
@@ -183,13 +183,13 @@ func TestStreamWindowUpdate(t *testing.T) {
protocol.MaxByteCount,
protocol.MaxByteCount,
nil,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
),
100,
100,
protocol.MaxByteCount,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
require.Zero(t, fc.GetWindowUpdate(monotime.Now()))
@@ -221,7 +221,7 @@ func TestStreamConnectionWindowUpdate(t *testing.T) {
100,
protocol.MaxByteCount,
nil,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
fc := NewStreamFlowController(
@@ -230,7 +230,7 @@ func TestStreamConnectionWindowUpdate(t *testing.T) {
1000,
protocol.MaxByteCount,
protocol.MaxByteCount,
&utils.RTTStats{},
utils.NewRTTStats(),
utils.DefaultLogger,
)
@@ -243,7 +243,7 @@ func TestStreamConnectionWindowUpdate(t *testing.T) {
func TestStreamWindowAutoTuning(t *testing.T) {
// the RTT is 1 second
rttStats := &utils.RTTStats{}
rttStats := utils.NewRTTStats()
rttStats.UpdateRTT(time.Second, 0)
require.Equal(t, time.Second, rttStats.SmoothedRTT())