Switch the hard-coded limit on number of connections in the QuicBufferedPacketStore to a protocol flag. Protected by FLAGS_quic_buffered_connections_limit. PiperOrigin-RevId: 976329428
diff --git a/quiche/common/quiche_protocol_flags_list.h b/quiche/common/quiche_protocol_flags_list.h index 41438b7..0372f35 100644 --- a/quiche/common/quiche_protocol_flags_list.h +++ b/quiche/common/quiche_protocol_flags_list.h
@@ -286,4 +286,8 @@ "If QuicConnection::GetUnackedMapInitialCapacity() already specifies a " "number, the larger of two applies.") +QUICHE_PROTOCOL_FLAG( + uint32_t, quic_buffered_connections_limit, 100, + "Limit on the number of connections in the buffered packet store.") + #endif
diff --git a/quiche/quic/core/quic_buffered_packet_store.cc b/quiche/quic/core/quic_buffered_packet_store.cc index 59b6679..64d843b 100644 --- a/quiche/quic/core/quic_buffered_packet_store.cc +++ b/quiche/quic/core/quic_buffered_packet_store.cc
@@ -47,12 +47,6 @@ using BufferedPacketList = QuicBufferedPacketStore::BufferedPacketList; using EnqueuePacketResult = QuicBufferedPacketStore::EnqueuePacketResult; -// Max number of connections this store can keep track. -static const size_t kDefaultMaxConnectionsInStore = 100; -// Up to half of the capacity can be used for storing non-CHLO packets. -static const size_t kMaxConnectionsWithoutCHLO = - kDefaultMaxConnectionsInStore / 2; - namespace { // This alarm removes expired entries in map each time this alarm fires. @@ -535,7 +529,7 @@ bool QuicBufferedPacketStore::ShouldNotBufferPacket(bool is_chlo) const { const bool is_store_full = - num_buffered_sessions_ >= kDefaultMaxConnectionsInStore; + num_buffered_sessions_ >= GetQuicFlag(quic_buffered_connections_limit); if (is_chlo) { return is_store_full; @@ -547,8 +541,8 @@ << ", num_connections_with_chlo: " << num_buffered_sessions_with_chlo_; size_t num_connections_without_chlo = num_buffered_sessions_ - num_buffered_sessions_with_chlo_; - bool reach_non_chlo_limit = - num_connections_without_chlo >= kMaxConnectionsWithoutCHLO; + bool reach_non_chlo_limit = num_connections_without_chlo >= + GetQuicFlag(quic_buffered_connections_limit) / 2; return is_store_full || reach_non_chlo_limit; }
diff --git a/quiche/quic/core/quic_buffered_packet_store_test.cc b/quiche/quic/core/quic_buffered_packet_store_test.cc index 9490506..01bb4f5 100644 --- a/quiche/quic/core/quic_buffered_packet_store_test.cc +++ b/quiche/quic/core/quic_buffered_packet_store_test.cc
@@ -45,13 +45,13 @@ #include "quiche/common/quiche_endian.h" namespace quic { -static const size_t kDefaultMaxConnectionsInStore = 100; -static const size_t kMaxConnectionsWithoutCHLO = - kDefaultMaxConnectionsInStore / 2; - namespace test { namespace { +const size_t kDefaultMaxConnectionsInStore = + GetQuicFlag(quic_buffered_connections_limit); +const size_t kMaxConnectionsWithoutCHLO = kDefaultMaxConnectionsInStore / 2; + const std::optional<ParsedClientHello> kNoParsedChlo; const std::optional<ParsedClientHello> kDefaultParsedChlo = std::make_optional<ParsedClientHello>();
diff --git a/quiche/quic/core/quic_dispatcher_test.cc b/quiche/quic/core/quic_dispatcher_test.cc index 9e83738..2877395 100644 --- a/quiche/quic/core/quic_dispatcher_test.cc +++ b/quiche/quic/core/quic_dispatcher_test.cc
@@ -83,9 +83,6 @@ using testing::WithArg; using testing::WithoutArgs; -static const size_t kDefaultMaxConnectionsInStore = 100; -static const size_t kMaxConnectionsWithoutCHLO = - kDefaultMaxConnectionsInStore / 2; static const int16_t kMaxNumSessionsToCreate = 16; namespace quic { @@ -95,6 +92,10 @@ const QuicConnectionId kReturnConnectionId{ {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}}; +const size_t kDefaultMaxConnectionsInStore = + GetQuicFlag(quic_buffered_connections_limit); +const size_t kMaxConnectionsWithoutCHLO = kDefaultMaxConnectionsInStore / 2; + class TestQuicSpdyServerSession : public QuicServerSessionBase { public: TestQuicSpdyServerSession(const QuicConfig& config,