Deprecate --gfe2_restart_flag_quic_use_one_map_in_time_wait_list.
PiperOrigin-RevId: 754952598
diff --git a/quiche/common/quiche_feature_flags_list.h b/quiche/common/quiche_feature_flags_list.h
index e24c493..bb8bf60 100755
--- a/quiche/common/quiche_feature_flags_list.h
+++ b/quiche/common/quiche_feature_flags_list.h
@@ -59,7 +59,6 @@
QUICHE_FLAG(bool, quiche_restart_flag_quic_support_release_time_for_gso, false, false, "If true, QuicGsoBatchWriter will support release time if it is available and the process has the permission to do so.")
QUICHE_FLAG(bool, quiche_restart_flag_quic_testonly_default_false, false, false, "A testonly restart flag that will always default to false.")
QUICHE_FLAG(bool, quiche_restart_flag_quic_testonly_default_true, true, true, "A testonly restart flag that will always default to true.")
-QUICHE_FLAG(bool, quiche_restart_flag_quic_use_one_map_in_time_wait_list, true, true, "If true, use a single connection ID data map in time wait list manager.")
#endif
// clang-format on
diff --git a/quiche/quic/core/quic_time_wait_list_manager.cc b/quiche/quic/core/quic_time_wait_list_manager.cc
index 0699656..8d15548 100644
--- a/quiche/quic/core/quic_time_wait_list_manager.cc
+++ b/quiche/quic/core/quic_time_wait_list_manager.cc
@@ -96,13 +96,6 @@
QuicTimeWaitListManager::ConnectionIdData* /*absl_nullable*/
QuicTimeWaitListManager::FindConnectionIdData(
const QuicConnectionId& connection_id) {
- if (use_old_connection_id_map_) {
- auto it = FindConnectionIdDataInMap(connection_id);
- if (it == connection_id_map_.end()) {
- return nullptr;
- }
- return &it->second;
- }
auto it = connection_id_data_map_.find(connection_id);
if (it == connection_id_data_map_.end()) {
return nullptr;
@@ -110,39 +103,6 @@
return it->second.get();
}
-QuicTimeWaitListManager::ConnectionIdMap::iterator
-QuicTimeWaitListManager::FindConnectionIdDataInMap(
- const QuicConnectionId& connection_id) {
- QUICHE_DCHECK(use_old_connection_id_map_);
- auto it = indirect_connection_id_map_.find(connection_id);
- if (it == indirect_connection_id_map_.end()) {
- return connection_id_map_.end();
- }
- return connection_id_map_.find(it->second);
-}
-
-void QuicTimeWaitListManager::AddConnectionIdDataToMap(
- const QuicConnectionId& canonical_connection_id, int num_packets,
- TimeWaitAction action, TimeWaitConnectionInfo info) {
- QUICHE_DCHECK(use_old_connection_id_map_);
- for (const auto& cid : info.active_connection_ids) {
- indirect_connection_id_map_[cid] = canonical_connection_id;
- }
- ConnectionIdData data(num_packets, clock_->ApproximateNow(), action,
- std::move(info));
- connection_id_map_.emplace(
- std::make_pair(canonical_connection_id, std::move(data)));
-}
-
-void QuicTimeWaitListManager::RemoveConnectionDataFromMap(
- ConnectionIdMap::iterator it) {
- QUICHE_DCHECK(use_old_connection_id_map_);
- for (const auto& cid : it->second.info.active_connection_ids) {
- indirect_connection_id_map_.erase(cid);
- }
- connection_id_map_.erase(it);
-}
-
void QuicTimeWaitListManager::AddConnectionIdToTimeWait(
TimeWaitAction action, TimeWaitConnectionInfo info) {
if (info.active_connection_ids.empty()) {
@@ -153,24 +113,6 @@
!info.termination_packets.empty());
QUICHE_DCHECK(action != DO_NOTHING || info.ietf_quic);
- if (use_old_connection_id_map_) {
- const QuicConnectionId canonical_connection_id =
- info.active_connection_ids.front();
- int num_packets = 0;
- auto it = FindConnectionIdDataInMap(canonical_connection_id);
- const bool new_connection_id = it == connection_id_map_.end();
- if (!new_connection_id) { // Replace record if it is reinserted.
- QUIC_CODE_COUNT(quic_time_wait_list_manager_reinsert_connection_id);
- num_packets = it->second.num_packets;
- RemoveConnectionDataFromMap(it);
- }
- TrimTimeWaitListIfNeeded();
- AddConnectionIdDataToMap(canonical_connection_id, num_packets, action,
- std::move(info));
- return;
- }
-
- QUIC_RESTART_FLAG_COUNT(quic_use_one_map_in_time_wait_list);
TrimTimeWaitListIfNeeded();
quiche::QuicheReferenceCountedPointer<RefCountedConnectionIdData> data(
@@ -191,9 +133,6 @@
bool QuicTimeWaitListManager::IsConnectionIdInTimeWait(
QuicConnectionId connection_id) const {
- if (use_old_connection_id_map_) {
- return indirect_connection_id_map_.contains(connection_id);
- }
return connection_id_data_map_.contains(connection_id);
}
@@ -455,9 +394,6 @@
QuicTime QuicTimeWaitListManager::GetOldestConnectionTime() const {
QUICHE_DCHECK(has_connections());
- if (use_old_connection_id_map_) {
- return connection_id_map_.begin()->second.time_added;
- }
return connection_id_data_map_.begin()->second->time_added;
}
@@ -486,16 +422,6 @@
if (!has_connections()) {
return false;
}
- if (use_old_connection_id_map_) {
- auto it = connection_id_map_.begin();
- QuicTime oldest_connection_id_time = it->second.time_added;
- if (oldest_connection_id_time > expiration_time) {
- // Too recent, don't retire.
- return false;
- }
- RemoveConnectionDataFromMap(it);
- return true;
- }
auto it = connection_id_data_map_.begin();
QuicTime oldest_connection_id_time = it->second->time_added;
if (oldest_connection_id_time > expiration_time) {
@@ -528,19 +454,16 @@
return;
}
while (has_connections() &&
- num_connections() >= static_cast<size_t>(kMaxConnections)) {
+ num_connections_ >= static_cast<size_t>(kMaxConnections)) {
MaybeExpireOldestConnection(QuicTime::Infinite());
QUIC_CODE_COUNT(quic_time_wait_list_trim_full);
}
QUICHE_DCHECK(!has_connections() ||
- num_connections() < static_cast<size_t>(kMaxConnections));
+ num_connections_ < static_cast<size_t>(kMaxConnections));
}
bool QuicTimeWaitListManager::has_connections() const {
- if (use_old_connection_id_map_) {
- return !connection_id_map_.empty();
- }
QUIC_BUG_IF(quic_time_wait_list_num_connections_inconsistent,
num_connections_ > connection_id_data_map_.size());
return num_connections_ > 0;
diff --git a/quiche/quic/core/quic_time_wait_list_manager.h b/quiche/quic/core/quic_time_wait_list_manager.h
index b1e7204..706c3db 100644
--- a/quiche/quic/core/quic_time_wait_list_manager.h
+++ b/quiche/quic/core/quic_time_wait_list_manager.h
@@ -16,7 +16,6 @@
#include <vector>
#include "absl/base/nullability.h"
-#include "absl/container/flat_hash_map.h"
#include "quiche/quic/core/quic_alarm.h"
#include "quiche/quic/core/quic_alarm_factory.h"
#include "quiche/quic/core/quic_blocked_writer_interface.h"
@@ -153,11 +152,7 @@
// the size is under the configured maximum.
void TrimTimeWaitListIfNeeded();
- // The number of connections on the time-wait list.
- size_t num_connections() const {
- return use_old_connection_id_map_ ? connection_id_map_.size()
- : num_connections_;
- }
+ size_t num_connections() const { return num_connections_; }
bool has_connections() const;
// Sends a version negotiation packet for |server_connection_id| and
@@ -317,8 +312,6 @@
// Returns the time when the first connection was added to the time-wait list.
QuicTime GetOldestConnectionTime() const;
- const bool use_old_connection_id_map_ =
- !GetQuicRestartFlag(quic_use_one_map_in_time_wait_list);
size_t num_connections_ = 0;
// QuicheLinkedHashMap allows lookup by ConnectionId
@@ -329,35 +322,9 @@
QuicConnectionIdHash>
connection_id_data_map_;
- using ConnectionIdMap =
- quiche::QuicheLinkedHashMap<QuicConnectionId, ConnectionIdData,
- QuicConnectionIdHash>;
- // Do not use find/emplace/erase on this map directly. Use
- // FindConnectionIdDataInMap, AddConnectionIdDateToMap,
- // RemoveConnectionDataFromMap instead.
- ConnectionIdMap connection_id_map_;
-
- // A connection can have multiple unretired ConnectionIds when it is closed.
- // These Ids have the same ConnectionIdData entry in connection_id_map_. To
- // find the entry, look up the cannoical ConnectionId in
- // indirect_connection_id_map_ first, and look up connection_id_map_ with the
- // cannoical ConnectionId.
- absl::flat_hash_map<QuicConnectionId, QuicConnectionId, QuicConnectionIdHash>
- indirect_connection_id_map_;
-
// Find data for the given connection_id. Returns nullptr if not found.
ConnectionIdData* /*absl_nullable*/ FindConnectionIdData(
const QuicConnectionId& connection_id);
- // Find an iterator for the given connection_id. Returns
- // connection_id_map_.end() if none found.
- ConnectionIdMap::iterator FindConnectionIdDataInMap(
- const QuicConnectionId& connection_id);
- // Inserts a ConnectionIdData entry to connection_id_map_.
- void AddConnectionIdDataToMap(const QuicConnectionId& canonical_connection_id,
- int num_packets, TimeWaitAction action,
- TimeWaitConnectionInfo info);
- // Removes a ConnectionIdData entry in connection_id_map_.
- void RemoveConnectionDataFromMap(ConnectionIdMap::iterator it);
// Pending termination packets that need to be sent out to the peer when we
// are given a chance to write by the dispatcher.
diff --git a/quiche/quic/core/quic_time_wait_list_manager_test.cc b/quiche/quic/core/quic_time_wait_list_manager_test.cc
index 8257962..883d348 100644
--- a/quiche/quic/core/quic_time_wait_list_manager_test.cc
+++ b/quiche/quic/core/quic_time_wait_list_manager_test.cc
@@ -539,17 +539,10 @@
QuicTimeWaitListManager::SEND_STATELESS_RESET,
TimeWaitConnectionInfo(false, nullptr, {cid1, cid3}));
- if (GetQuicRestartFlag(quic_use_one_map_in_time_wait_list)) {
- EXPECT_TRUE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid1));
- EXPECT_TRUE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid2));
- EXPECT_TRUE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid3));
- EXPECT_EQ(time_wait_list_manager_.num_connections(), 2u);
- } else {
- EXPECT_TRUE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid1));
- EXPECT_FALSE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid2));
- EXPECT_TRUE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid3));
- EXPECT_EQ(time_wait_list_manager_.num_connections(), 1u);
- }
+ EXPECT_TRUE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid1));
+ EXPECT_TRUE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid2));
+ EXPECT_TRUE(time_wait_list_manager_.IsConnectionIdInTimeWait(cid3));
+ EXPECT_EQ(time_wait_list_manager_.num_connections(), 2u);
}
TEST_F(QuicTimeWaitListManagerTest, ConnectionIdsOrderedByTime) {