1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-24 04:01:07 +03:00

Track a sequence number for non-DSR packets.

Summary:
This is essentially a further extension of the previous idead of having a sequence number per-DSR stream.

The rationale is the same -- to reduce spurious loss declared from the reordering threshold.

The primary case this works around is the following

```
<!DSR><!DSR><!DSR><DSR><DSR><DSR><!DSR>
```

Suppose we get an ACK for [0-1,3-5] leaving only packet number 2 remaining.

The naive reordering threshold will declare packet number 2 as lost. However, in principle this is arguably wrong since when considered on the timeline of !DSR packets, the gap does not exceed the reordering threshold.

To accomodate this we need to track a monotonically increasing sequence number for each non-DSR packet written, and store that in the packet metadata. This way we can use that for the reordering comparison rather than the packet number itself.

When there is no DSR packets ever written to a connection this should devolve to an identical result to using the packet number, as they will increment together.

Reviewed By: kvtsoy

Differential Revision: D46742386

fbshipit-source-id: 2983746081c7b6282358416e2bb1bcc80861be58
This commit is contained in:
Matt Joras
2023-06-27 16:56:11 -07:00
committed by Facebook GitHub Bot
parent c3ea605df1
commit e3d67efb5a
14 changed files with 321 additions and 25 deletions

View File

@@ -1228,7 +1228,7 @@ TEST_F(QuicStateFunctionsTest, EarliestLossTimer) {
TEST_P(QuicStateFunctionsTest, CloseTranportStateChange) {
QuicConnectionStateBase conn(QuicNodeType::Server);
getAckState(conn, GetParam()).nextPacketNum = kMaxPacketNumber - 2;
getAckState(conn, GetParam()).nextPacketNum = kMaxPacketNumber - 1;
EXPECT_FALSE(conn.pendingEvents.closeTransport);
increaseNextPacketNum(conn, GetParam());
EXPECT_TRUE(conn.pendingEvents.closeTransport);