gfe-relnote: Stop removing handshake packets from flight when the handshake timer causes them to be retransmitted. Protected by gfe2_reloadable_flag_quic_loss_removes_from_inflight.
PiperOrigin-RevId: 244887395
Change-Id: I355da0f1a78e596e4d4bd2a2721c37d1cedc5806
diff --git a/quic/core/quic_sent_packet_manager_test.cc b/quic/core/quic_sent_packet_manager_test.cc
index 6448419..ec8de8b 100644
--- a/quic/core/quic_sent_packet_manager_test.cc
+++ b/quic/core/quic_sent_packet_manager_test.cc
@@ -1036,6 +1036,7 @@
SendDataPacket(kNumSentCryptoPackets + i);
}
EXPECT_TRUE(manager_.HasUnackedCryptoPackets());
+ EXPECT_EQ(5 * kDefaultLength, manager_.GetBytesInFlight());
// The first retransmits 2 packets.
if (manager_.session_decides_what_to_write()) {
@@ -1051,6 +1052,10 @@
RetransmitNextPacket(7);
EXPECT_FALSE(manager_.HasPendingRetransmissions());
}
+ // Expect all 4 handshake packets to be in flight and 3 data packets.
+ if (GetQuicReloadableFlag(quic_loss_removes_from_inflight)) {
+ EXPECT_EQ(7 * kDefaultLength, manager_.GetBytesInFlight());
+ }
EXPECT_TRUE(manager_.HasUnackedCryptoPackets());
// The second retransmits 2 packets.
@@ -1067,12 +1072,26 @@
RetransmitNextPacket(9);
EXPECT_FALSE(manager_.HasPendingRetransmissions());
}
+ if (GetQuicReloadableFlag(quic_loss_removes_from_inflight)) {
+ EXPECT_EQ(9 * kDefaultLength, manager_.GetBytesInFlight());
+ }
EXPECT_TRUE(manager_.HasUnackedCryptoPackets());
// Now ack the two crypto packets and the speculatively encrypted request,
// and ensure the first four crypto packets get abandoned, but not lost.
- uint64_t acked[] = {3, 4, 5, 8, 9};
- ExpectAcksAndLosses(true, acked, QUIC_ARRAYSIZE(acked), nullptr, 0);
+ if (GetQuicReloadableFlag(quic_loss_removes_from_inflight)) {
+ // Crypto packets remain in flight, so any that aren't acked will be lost.
+ uint64_t acked[] = {3, 4, 5, 8, 9};
+ uint64_t lost[] = {1, 2, 6};
+ ExpectAcksAndLosses(true, acked, QUIC_ARRAYSIZE(acked), lost,
+ QUIC_ARRAYSIZE(lost));
+ if (manager_.session_decides_what_to_write()) {
+ EXPECT_CALL(notifier_, OnFrameLost(_)).Times(3);
+ }
+ } else {
+ uint64_t acked[] = {3, 4, 5, 8, 9};
+ ExpectAcksAndLosses(true, acked, QUIC_ARRAYSIZE(acked), nullptr, 0);
+ }
if (manager_.session_decides_what_to_write()) {
EXPECT_CALL(notifier_, HasUnackedCryptoData())
.WillRepeatedly(Return(false));
@@ -1203,8 +1222,13 @@
manager_.OnAckFrameEnd(clock_.Now(), ENCRYPTION_INITIAL));
EXPECT_FALSE(manager_.HasUnackedCryptoPackets());
- uint64_t unacked[] = {3};
- VerifyUnackedPackets(unacked, QUIC_ARRAYSIZE(unacked));
+ if (GetQuicReloadableFlag(quic_loss_removes_from_inflight)) {
+ uint64_t unacked[] = {1, 3};
+ VerifyUnackedPackets(unacked, QUIC_ARRAYSIZE(unacked));
+ } else {
+ uint64_t unacked[] = {3};
+ VerifyUnackedPackets(unacked, QUIC_ARRAYSIZE(unacked));
+ }
}
TEST_P(QuicSentPacketManagerTest, CryptoHandshakeTimeoutUnsentDataPacket) {