gfe-relnote: Remove obsolete IETF QUIC recovery functionality. Protected by gfe2_reloadable_flag_quic_sent_packet_manager_cleanup. PiperOrigin-RevId: 261917827 Change-Id: I2107915e7322138225b33d1593595e6ae2301ccd
diff --git a/quic/core/congestion_control/rtt_stats.h b/quic/core/congestion_control/rtt_stats.h index 7b58276..997faa4 100644 --- a/quic/core/congestion_control/rtt_stats.h +++ b/quic/core/congestion_control/rtt_stats.h
@@ -73,7 +73,10 @@ QuicTime::Delta mean_deviation() const { return mean_deviation_; } - QuicTime::Delta max_ack_delay() const { return max_ack_delay_; } + QuicTime::Delta max_ack_delay() const { + DCHECK(!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)); + return max_ack_delay_; + } QuicTime last_update_time() const { return last_update_time_; } @@ -101,6 +104,7 @@ QuicTime::Delta initial_rtt_; // The maximum ack delay observed over the connection after excluding ack // delays that were too large to be included in an RTT measurement. + // TODO(ianswett): Remove when deprecating quic_sent_packet_manager_cleanup. QuicTime::Delta max_ack_delay_; QuicTime last_update_time_; // Whether to ignore the peer's max ack delay.
diff --git a/quic/core/congestion_control/rtt_stats_test.cc b/quic/core/congestion_control/rtt_stats_test.cc index 83cb155..4d259d3 100644 --- a/quic/core/congestion_control/rtt_stats_test.cc +++ b/quic/core/congestion_control/rtt_stats_test.cc
@@ -35,20 +35,28 @@ QuicTime::Zero()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.smoothed_rtt()); - EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + } // Verify that a plausible ack delay increases the max ack delay. rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(400), QuicTime::Delta::FromMilliseconds(100), QuicTime::Zero()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.smoothed_rtt()); - EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), + rtt_stats_.max_ack_delay()); + } // Verify that Smoothed RTT includes max ack delay if it's reasonable. rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(350), QuicTime::Delta::FromMilliseconds(50), QuicTime::Zero()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.smoothed_rtt()); - EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), + rtt_stats_.max_ack_delay()); + } // Verify that large erroneous ack_delay does not change Smoothed RTT. rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(200), QuicTime::Delta::FromMilliseconds(300), @@ -56,7 +64,10 @@ EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMicroseconds(287500), rtt_stats_.smoothed_rtt()); - EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), + rtt_stats_.max_ack_delay()); + } } TEST_F(RttStatsTest, SmoothedRttIgnoreAckDelay) { @@ -67,14 +78,18 @@ QuicTime::Zero()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.smoothed_rtt()); - EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + } // Verify that a plausible ack delay increases the max ack delay. rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(300), QuicTime::Delta::FromMilliseconds(100), QuicTime::Zero()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(300), rtt_stats_.smoothed_rtt()); - EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + } // Verify that Smoothed RTT includes max ack delay if it's reasonable. rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(300), QuicTime::Delta::FromMilliseconds(50), QuicTime::Zero()); @@ -87,7 +102,9 @@ EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMicroseconds(287500), rtt_stats_.smoothed_rtt()); - EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + } } // Ensure that the potential rounding artifacts in EWMA calculation do not cause @@ -208,7 +225,9 @@ EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.smoothed_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.min_rtt()); - EXPECT_EQ(QuicTime::Delta::FromMilliseconds(0), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::FromMilliseconds(0), rtt_stats_.max_ack_delay()); + } rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(300), QuicTime::Delta::FromMilliseconds(100), @@ -216,14 +235,19 @@ EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.smoothed_rtt()); EXPECT_EQ(QuicTime::Delta::FromMilliseconds(200), rtt_stats_.min_rtt()); - EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), + rtt_stats_.max_ack_delay()); + } // Reset rtt stats on connection migrations. rtt_stats_.OnConnectionMigration(); EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.latest_rtt()); EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.smoothed_rtt()); EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.min_rtt()); - EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + if (!GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + EXPECT_EQ(QuicTime::Delta::Zero(), rtt_stats_.max_ack_delay()); + } } } // namespace test
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc index fb0e8de..0542edb 100644 --- a/quic/core/quic_sent_packet_manager.cc +++ b/quic/core/quic_sent_packet_manager.cc
@@ -159,17 +159,29 @@ if (config.HasClientSentConnectionOption(kMAD1, perspective)) { rtt_stats_.set_initial_max_ack_delay(peer_max_ack_delay_); } - if (config.HasClientSentConnectionOption(kMAD2, perspective)) { - min_tlp_timeout_ = QuicTime::Delta::Zero(); - } - if (config.HasClientSentConnectionOption(kMAD3, perspective)) { - min_rto_timeout_ = QuicTime::Delta::Zero(); - } - if (config.HasClientSentConnectionOption(kMAD4, perspective)) { - ietf_style_tlp_ = true; - } - if (config.HasClientSentConnectionOption(kMAD5, perspective)) { - ietf_style_2x_tlp_ = true; + if (GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + QUIC_RELOADABLE_FLAG_COUNT(quic_sent_packet_manager_cleanup); + if (config.HasClientSentConnectionOption(kMAD2, perspective)) { + // Set the minimum to the alarm granularity. + min_tlp_timeout_ = QuicTime::Delta::FromMilliseconds(1); + } + if (config.HasClientSentConnectionOption(kMAD3, perspective)) { + // Set the minimum to the alarm granularity. + min_rto_timeout_ = QuicTime::Delta::FromMilliseconds(1); + } + } else { + if (config.HasClientSentConnectionOption(kMAD2, perspective)) { + min_tlp_timeout_ = QuicTime::Delta::Zero(); + } + if (config.HasClientSentConnectionOption(kMAD3, perspective)) { + min_rto_timeout_ = QuicTime::Delta::Zero(); + } + if (config.HasClientSentConnectionOption(kMAD4, perspective)) { + ietf_style_tlp_ = true; + } + if (config.HasClientSentConnectionOption(kMAD5, perspective)) { + ietf_style_2x_tlp_ = true; + } } // Configure congestion control.
diff --git a/quic/core/quic_sent_packet_manager_test.cc b/quic/core/quic_sent_packet_manager_test.cc index 4fce40f..fe34851 100644 --- a/quic/core/quic_sent_packet_manager_test.cc +++ b/quic/core/quic_sent_packet_manager_test.cc
@@ -2259,12 +2259,16 @@ EXPECT_EQ(QuicTime::Delta::FromMicroseconds(100002), QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_, 0)); - // Send two packets, and the TLP should be 2 us. + // Send two packets, and the TLP should be 2 us or 1ms. + QuicTime::Delta expected_tlp_delay = + GetQuicReloadableFlag(quic_sent_packet_manager_cleanup) + ? QuicTime::Delta::FromMilliseconds(1) + : QuicTime::Delta::FromMicroseconds(2); SendDataPacket(1); SendDataPacket(2); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2), + EXPECT_EQ(expected_tlp_delay, QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_)); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2), + EXPECT_EQ(expected_tlp_delay, QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_, 0)); } @@ -2290,16 +2294,23 @@ QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_)); EXPECT_EQ(QuicTime::Delta::FromMicroseconds(100002), QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_, 0)); - // Send two packets, and the TLP should be 2 us. + // Send two packets, and the TLP should be 2 us or 1ms. + QuicTime::Delta expected_tlp_delay = + GetQuicReloadableFlag(quic_sent_packet_manager_cleanup) + ? QuicTime::Delta::FromMilliseconds(1) + : QuicTime::Delta::FromMicroseconds(2); SendDataPacket(1); SendDataPacket(2); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2), + EXPECT_EQ(expected_tlp_delay, QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_)); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2), + EXPECT_EQ(expected_tlp_delay, QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_, 0)); } TEST_P(QuicSentPacketManagerTest, NegotiateIETFTLPFromOptionsAtServer) { + if (GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + return; + } QuicConfig config; QuicTagVector options; @@ -2328,6 +2339,9 @@ } TEST_P(QuicSentPacketManagerTest, NegotiateIETFTLPFromOptionsAtClient) { + if (GetQuicReloadableFlag(quic_sent_packet_manager_cleanup)) { + return; + } QuicConfig client_config; QuicTagVector options; @@ -2369,14 +2383,22 @@ RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); rtt_stats->UpdateRtt(QuicTime::Delta::FromMicroseconds(1), QuicTime::Delta::Zero(), QuicTime::Zero()); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(1), + QuicTime::Delta expected_rto_delay = + GetQuicReloadableFlag(quic_sent_packet_manager_cleanup) + ? QuicTime::Delta::FromMilliseconds(1) + : QuicTime::Delta::FromMicroseconds(1); + EXPECT_EQ(expected_rto_delay, QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(1), + EXPECT_EQ(expected_rto_delay, QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_, 0)); // The TLP with fewer than 2 packets outstanding includes 1/2 min RTO(0ms). - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2), + QuicTime::Delta expected_tlp_delay = + GetQuicReloadableFlag(quic_sent_packet_manager_cleanup) + ? QuicTime::Delta::FromMicroseconds(502) + : QuicTime::Delta::FromMicroseconds(2); + EXPECT_EQ(expected_tlp_delay, QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_)); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2), + EXPECT_EQ(expected_tlp_delay, QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_, 0)); } @@ -2394,14 +2416,22 @@ RttStats* rtt_stats = const_cast<RttStats*>(manager_.GetRttStats()); rtt_stats->UpdateRtt(QuicTime::Delta::FromMicroseconds(1), QuicTime::Delta::Zero(), QuicTime::Zero()); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(1), + QuicTime::Delta expected_rto_delay = + GetQuicReloadableFlag(quic_sent_packet_manager_cleanup) + ? QuicTime::Delta::FromMilliseconds(1) + : QuicTime::Delta::FromMicroseconds(1); + EXPECT_EQ(expected_rto_delay, QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_)); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(1), + EXPECT_EQ(expected_rto_delay, QuicSentPacketManagerPeer::GetRetransmissionDelay(&manager_, 0)); // The TLP with fewer than 2 packets outstanding includes 1/2 min RTO(0ms). - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2), + QuicTime::Delta expected_tlp_delay = + GetQuicReloadableFlag(quic_sent_packet_manager_cleanup) + ? QuicTime::Delta::FromMicroseconds(502) + : QuicTime::Delta::FromMicroseconds(2); + EXPECT_EQ(expected_tlp_delay, QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_)); - EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2), + EXPECT_EQ(expected_tlp_delay, QuicSentPacketManagerPeer::GetTailLossProbeDelay(&manager_, 0)); }