Remove connection_id added to connection_dispatcher_map_ via either OnConnectionIdRetired or OnConnectionAddedToTimeWaitList in gfe_quic_dispatcher when multiple CIDs are supported.
Protected by FLAGS_quic_restart_flag_quic_time_wait_list_support_multiple_cid_v2.
PiperOrigin-RevId: 351362306
Change-Id: I6c49f460cbe4c1ca219d6529caef596803f1c02d
diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc
index 28f3923..a4b4099 100644
--- a/quic/core/quic_dispatcher.cc
+++ b/quic/core/quic_dispatcher.cc
@@ -328,7 +328,7 @@
}
if (support_multiple_cid_per_connection_) {
QUIC_RESTART_FLAG_COUNT(
- quic_dispatcher_support_multiple_cid_per_connection);
+ quic_dispatcher_support_multiple_cid_per_connection_v2);
}
QUIC_BUG_IF(GetSupportedVersions().empty())
<< "Trying to create dispatcher without any supported versions";
diff --git a/quic/core/quic_dispatcher.h b/quic/core/quic_dispatcher.h
index 75cdacf..14ca07c 100644
--- a/quic/core/quic_dispatcher.h
+++ b/quic/core/quic_dispatcher.h
@@ -455,8 +455,9 @@
GetQuicRestartFlag(quic_use_reference_counted_sesssion_map);
const bool support_multiple_cid_per_connection_ =
use_reference_counted_session_map_ &&
- GetQuicRestartFlag(quic_time_wait_list_support_multiple_cid) &&
- GetQuicRestartFlag(quic_dispatcher_support_multiple_cid_per_connection);
+ GetQuicRestartFlag(quic_time_wait_list_support_multiple_cid_v2) &&
+ GetQuicRestartFlag(
+ quic_dispatcher_support_multiple_cid_per_connection_v2);
};
} // namespace quic
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index a614199..b801228 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -1974,8 +1974,8 @@
QuicDispatcherSupportMultipleConnectionIdPerConnectionTest()
: QuicDispatcherTestBase(crypto_test_utils::ProofSourceForTesting()) {
SetQuicRestartFlag(quic_use_reference_counted_sesssion_map, true);
- SetQuicRestartFlag(quic_time_wait_list_support_multiple_cid, true);
- SetQuicRestartFlag(quic_dispatcher_support_multiple_cid_per_connection,
+ SetQuicRestartFlag(quic_time_wait_list_support_multiple_cid_v2, true);
+ SetQuicRestartFlag(quic_dispatcher_support_multiple_cid_per_connection_v2,
true);
dispatcher_ = std::make_unique<NiceMock<TestDispatcher>>(
&config_, &crypto_config_, &version_manager_,
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 8a1a48a..b99ca34 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -70,7 +70,7 @@
QUIC_FLAG(FLAGS_quic_reloadable_flag_send_quic_fallback_server_config_on_leto_error, false)
QUIC_FLAG(FLAGS_quic_restart_flag_dont_fetch_quic_private_keys_from_leto, false)
QUIC_FLAG(FLAGS_quic_restart_flag_http2_parse_priority_update_frame, false)
-QUIC_FLAG(FLAGS_quic_restart_flag_quic_dispatcher_support_multiple_cid_per_connection, false)
+QUIC_FLAG(FLAGS_quic_restart_flag_quic_dispatcher_support_multiple_cid_per_connection_v2, false)
QUIC_FLAG(FLAGS_quic_restart_flag_quic_enable_zero_rtt_for_tls_v2, true)
QUIC_FLAG(FLAGS_quic_restart_flag_quic_offload_pacing_to_usps2, false)
QUIC_FLAG(FLAGS_quic_restart_flag_quic_server_temporarily_retain_tls_zero_rtt_keys, true)
@@ -79,5 +79,5 @@
QUIC_FLAG(FLAGS_quic_restart_flag_quic_support_release_time_for_gso, false)
QUIC_FLAG(FLAGS_quic_restart_flag_quic_testonly_default_false, false)
QUIC_FLAG(FLAGS_quic_restart_flag_quic_testonly_default_true, true)
-QUIC_FLAG(FLAGS_quic_restart_flag_quic_time_wait_list_support_multiple_cid, false)
+QUIC_FLAG(FLAGS_quic_restart_flag_quic_time_wait_list_support_multiple_cid_v2, false)
QUIC_FLAG(FLAGS_quic_restart_flag_quic_use_reference_counted_sesssion_map, false)
diff --git a/quic/core/quic_time_wait_list_manager.cc b/quic/core/quic_time_wait_list_manager.cc
index 11fca70..b59c5bc 100644
--- a/quic/core/quic_time_wait_list_manager.cc
+++ b/quic/core/quic_time_wait_list_manager.cc
@@ -82,7 +82,7 @@
writer_(writer),
visitor_(visitor) {
if (use_indirect_connection_id_map_) {
- QUIC_RESTART_FLAG_COUNT(quic_time_wait_list_support_multiple_cid);
+ QUIC_RESTART_FLAG_COUNT(quic_time_wait_list_support_multiple_cid_v2);
}
SetConnectionIdCleanUpAlarm();
}
@@ -153,9 +153,14 @@
GetQuicFlag(FLAGS_quic_time_wait_list_max_connections);
DCHECK(connection_id_map_.empty() ||
num_connections() < static_cast<size_t>(max_connections));
+ if (use_indirect_connection_id_map_ && new_connection_id) {
+ for (const auto& cid : info.active_connection_ids) {
+ visitor_->OnConnectionAddedToTimeWaitList(cid);
+ }
+ }
AddConnectionIdDataToMap(canonical_connection_id, num_packets, action,
std::move(info));
- if (new_connection_id) {
+ if (!use_indirect_connection_id_map_ && new_connection_id) {
visitor_->OnConnectionAddedToTimeWaitList(canonical_connection_id);
}
}
diff --git a/quic/core/quic_time_wait_list_manager.h b/quic/core/quic_time_wait_list_manager.h
index ad6d45c..6dbd737 100644
--- a/quic/core/quic_time_wait_list_manager.h
+++ b/quic/core/quic_time_wait_list_manager.h
@@ -332,7 +332,7 @@
// When this is default true, remove the connection_id argument of
// AddConnectionIdToTimeWait.
bool use_indirect_connection_id_map_ =
- GetQuicRestartFlag(quic_time_wait_list_support_multiple_cid);
+ GetQuicRestartFlag(quic_time_wait_list_support_multiple_cid_v2);
};
} // namespace quic
diff --git a/quic/core/quic_time_wait_list_manager_test.cc b/quic/core/quic_time_wait_list_manager_test.cc
index 5ece763..189d3f0 100644
--- a/quic/core/quic_time_wait_list_manager_test.cc
+++ b/quic/core/quic_time_wait_list_manager_test.cc
@@ -447,13 +447,14 @@
TEST_F(QuicTimeWaitListManagerTest,
CleanUpOldConnectionIdsForMultipleConnectionIdsPerConnection) {
- if (!GetQuicRestartFlag(quic_time_wait_list_support_multiple_cid)) {
+ if (!GetQuicRestartFlag(quic_time_wait_list_support_multiple_cid_v2)) {
return;
}
connection_id_ = TestConnectionId(7);
const size_t kConnectionCloseLength = 100;
EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
+ EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(TestConnectionId(8)));
std::vector<std::unique_ptr<QuicEncryptedPacket>> termination_packets;
termination_packets.push_back(
std::unique_ptr<QuicEncryptedPacket>(new QuicEncryptedPacket(
@@ -711,13 +712,14 @@
TEST_F(QuicTimeWaitListManagerTest,
SendConnectionClosePacketsForMultipleConnectionIds) {
- if (!GetQuicRestartFlag(quic_time_wait_list_support_multiple_cid)) {
+ if (!GetQuicRestartFlag(quic_time_wait_list_support_multiple_cid_v2)) {
return;
}
connection_id_ = TestConnectionId(7);
const size_t kConnectionCloseLength = 100;
EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
+ EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(TestConnectionId(8)));
std::vector<std::unique_ptr<QuicEncryptedPacket>> termination_packets;
termination_packets.push_back(
std::unique_ptr<QuicEncryptedPacket>(new QuicEncryptedPacket(