gfe-relnote: In QUIC, use IdleNetworkDetector to detect handshake and idle network timeout. Protected by gfe2_reloadable_flag_quic_use_idle_network_detector.
PiperOrigin-RevId: 303103349
Change-Id: I3e5d6c3a2585284a69fa680b698ea14e0c86174e
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 1b1511b..e5faa35 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -844,6 +844,11 @@
}
TestAlarmFactory::TestAlarm* GetTimeoutAlarm() {
+ if (GetQuicReloadableFlag(quic_use_blackhole_detector) &&
+ GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ return reinterpret_cast<TestAlarmFactory::TestAlarm*>(
+ QuicConnectionPeer::GetIdleNetworkDetectorAlarm(this));
+ }
return reinterpret_cast<TestAlarmFactory::TestAlarm*>(
QuicConnectionPeer::GetTimeoutAlarm(this));
}
@@ -4777,7 +4782,7 @@
EXPECT_TRUE(connection_.connected());
// Advance the time and send the first packet to the peer.
- clock_.AdvanceTime(QuicTime::Delta::FromMicroseconds(20));
+ clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
QuicPacketNumber last_packet;
SendStreamDataToPeer(1, "foo", 0, NO_FIN, &last_packet);
EXPECT_EQ(QuicPacketNumber(1u), last_packet);
@@ -4790,7 +4795,10 @@
EXPECT_CALL(visitor_, OnConnectionClosed(_, _)).Times(0);
QuicTime::Delta delay = initial_ddl - clock_.ApproximateNow();
clock_.AdvanceTime(delay);
- connection_.GetTimeoutAlarm()->Fire();
+ if (!GetQuicReloadableFlag(quic_use_blackhole_detector) ||
+ !GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ connection_.GetTimeoutAlarm()->Fire();
+ }
// Verify the timeout alarm deadline is updated.
EXPECT_TRUE(connection_.connected());
EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
@@ -4879,8 +4887,11 @@
EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _));
ProcessAckPacket(&frame);
- // Fire early to verify it wouldn't timeout yet.
- connection_.GetTimeoutAlarm()->Fire();
+ if (!GetQuicReloadableFlag(quic_use_blackhole_detector) ||
+ !GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ // Fire early to verify it wouldn't timeout yet.
+ connection_.GetTimeoutAlarm()->Fire();
+ }
EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
EXPECT_TRUE(connection_.connected());
@@ -5627,7 +5638,13 @@
SendStreamDataToPeer(
GetNthClientInitiatedStreamId(1, connection_.transport_version()), "foo",
0, FIN, nullptr);
- EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ if (GetQuicReloadableFlag(quic_use_blackhole_detector) &&
+ GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ EXPECT_EQ(default_timeout + five_ms,
+ connection_.GetTimeoutAlarm()->deadline());
+ } else {
+ EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ }
// Now send more data. This will not move the timeout because
// no data has been received since the previous write.
@@ -5635,13 +5652,22 @@
SendStreamDataToPeer(
GetNthClientInitiatedStreamId(1, connection_.transport_version()), "foo",
3, FIN, nullptr);
- EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ if (GetQuicReloadableFlag(quic_use_blackhole_detector) &&
+ GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ EXPECT_EQ(default_timeout + five_ms,
+ connection_.GetTimeoutAlarm()->deadline());
+ } else {
+ EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ }
// The original alarm will fire. We should not time out because we had a
// network event at t=5ms. The alarm will reregister.
clock_.AdvanceTime(initial_idle_timeout - five_ms - five_ms);
EXPECT_EQ(default_timeout, clock_.ApproximateNow());
- connection_.GetTimeoutAlarm()->Fire();
+ if (!GetQuicReloadableFlag(quic_use_blackhole_detector) ||
+ !GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ connection_.GetTimeoutAlarm()->Fire();
+ }
EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
EXPECT_TRUE(connection_.connected());
EXPECT_EQ(default_timeout + five_ms,
@@ -5690,7 +5716,13 @@
SendStreamDataToPeer(
GetNthClientInitiatedStreamId(1, connection_.transport_version()), "foo",
0, FIN, nullptr);
- EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ if (GetQuicReloadableFlag(quic_use_blackhole_detector) &&
+ GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ EXPECT_EQ(default_timeout + five_ms,
+ connection_.GetTimeoutAlarm()->deadline());
+ } else {
+ EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ }
// Move forward 5 ms and receive a packet, which will move the timeout
// forward 5 ms more (but will not reschedule the alarm).
@@ -5719,7 +5751,10 @@
ASSERT_EQ(default_timeout.ToDebuggingValue(),
clock_.Now().ToDebuggingValue());
EXPECT_EQ(default_timeout, clock_.Now());
- connection_.GetTimeoutAlarm()->Fire();
+ if (!GetQuicReloadableFlag(quic_use_blackhole_detector) ||
+ !GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ connection_.GetTimeoutAlarm()->Fire();
+ }
EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
EXPECT_TRUE(connection_.connected());
ASSERT_EQ(final_timeout.ToDebuggingValue(),
@@ -5775,7 +5810,13 @@
SendStreamDataToPeer(
GetNthClientInitiatedStreamId(1, connection_.transport_version()), "foo",
0, FIN, nullptr);
- EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ if (GetQuicReloadableFlag(quic_use_blackhole_detector) &&
+ GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ EXPECT_EQ(default_timeout + five_ms,
+ connection_.GetTimeoutAlarm()->deadline());
+ } else {
+ EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ }
// Now send more data. This will not move the timeout because
// no data has been received since the previous write.
@@ -5783,13 +5824,22 @@
SendStreamDataToPeer(
GetNthClientInitiatedStreamId(1, connection_.transport_version()), "foo",
3, FIN, nullptr);
- EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ if (GetQuicReloadableFlag(quic_use_blackhole_detector) &&
+ GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ EXPECT_EQ(default_timeout + five_ms,
+ connection_.GetTimeoutAlarm()->deadline());
+ } else {
+ EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ }
// The original alarm will fire. We should not time out because we had a
// network event at t=5ms. The alarm will reregister.
clock_.AdvanceTime(default_idle_timeout - five_ms - five_ms);
EXPECT_EQ(default_timeout, clock_.ApproximateNow());
- connection_.GetTimeoutAlarm()->Fire();
+ if (!GetQuicReloadableFlag(quic_use_blackhole_detector) ||
+ !GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ connection_.GetTimeoutAlarm()->Fire();
+ }
EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
EXPECT_TRUE(connection_.connected());
EXPECT_EQ(default_timeout + five_ms,
@@ -5852,7 +5902,13 @@
SendStreamDataToPeer(
GetNthClientInitiatedStreamId(1, connection_.transport_version()), "foo",
0, FIN, nullptr);
- EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ if (GetQuicReloadableFlag(quic_use_blackhole_detector) &&
+ GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ EXPECT_EQ(default_timeout + five_ms,
+ connection_.GetTimeoutAlarm()->deadline());
+ } else {
+ EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ }
// Retransmit the packet via tail loss probe.
clock_.AdvanceTime(connection_.GetRetransmissionAlarm()->deadline() -
@@ -5909,7 +5965,13 @@
SendStreamDataToPeer(
GetNthClientInitiatedStreamId(1, connection_.transport_version()), "foo",
0, FIN, nullptr);
- EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ if (GetQuicReloadableFlag(quic_use_blackhole_detector) &&
+ GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ EXPECT_EQ(default_timeout + five_ms,
+ connection_.GetTimeoutAlarm()->deadline());
+ } else {
+ EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline());
+ }
// Indicate streams are still open.
EXPECT_CALL(visitor_, ShouldKeepConnectionAlive())
@@ -5960,7 +6022,10 @@
// network event at t=5ms. The alarm will reregister.
clock_.AdvanceTime(initial_idle_timeout - five_ms);
EXPECT_EQ(default_timeout, clock_.ApproximateNow());
- connection_.GetTimeoutAlarm()->Fire();
+ if (!GetQuicReloadableFlag(quic_use_blackhole_detector) ||
+ !GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ connection_.GetTimeoutAlarm()->Fire();
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
EXPECT_EQ(default_timeout + five_ms,
@@ -6017,7 +6082,10 @@
// network event at t=5ms. The alarm will reregister.
clock_.AdvanceTime(initial_idle_timeout - five_ms);
EXPECT_EQ(default_timeout, clock_.ApproximateNow());
- connection_.GetTimeoutAlarm()->Fire();
+ if (!GetQuicReloadableFlag(quic_use_blackhole_detector) ||
+ !GetQuicReloadableFlag(quic_use_idle_network_detector)) {
+ connection_.GetTimeoutAlarm()->Fire();
+ }
EXPECT_TRUE(connection_.connected());
EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
EXPECT_EQ(default_timeout + five_ms,