Deprecate --gfe2_restart_flag_quic_dispatcher_ack_buffered_initial_packets.
PiperOrigin-RevId: 689086295
diff --git a/quiche/common/quiche_feature_flags_list.h b/quiche/common/quiche_feature_flags_list.h
index 3cf6f59..01097c8 100755
--- a/quiche/common/quiche_feature_flags_list.h
+++ b/quiche/common/quiche_feature_flags_list.h
@@ -54,7 +54,6 @@
QUICHE_FLAG(bool, quiche_reloadable_flag_quic_testonly_default_false, false, false, "A testonly reloadable flag that will always default to false.")
QUICHE_FLAG(bool, quiche_reloadable_flag_quic_testonly_default_true, true, true, "A testonly reloadable flag that will always default to true.")
QUICHE_FLAG(bool, quiche_reloadable_flag_quic_use_received_client_addresses_cache, true, true, "If true, use a LRU cache to record client addresses of packets received on server's original address.")
-QUICHE_FLAG(bool, quiche_restart_flag_quic_dispatcher_ack_buffered_initial_packets, true, true, "If both this flag and --quic_dispatcher_replace_cid_on_first_packet are true, QUIC dispatcher will ack INITIAL packets once it is saved into buffered packet store.")
QUICHE_FLAG(bool, quiche_restart_flag_quic_support_ect1, false, false, "When true, allows sending of QUIC packets marked ECT(1). A different flag (TBD) will actually utilize this capability to send ECT(1).")
QUICHE_FLAG(bool, quiche_restart_flag_quic_support_flow_label, false, false, "If true, QUIC will support reading and writing IPv6 flow labels.")
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.")
diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc
index 06f2bcb..cb49bcb 100644
--- a/quiche/quic/core/http/end_to_end_test.cc
+++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -307,10 +307,6 @@
return client;
}
- bool DispatcherAckEnabled() const {
- return GetQuicRestartFlag(quic_dispatcher_ack_buffered_initial_packets);
- }
-
void set_smaller_flow_control_receive_window() {
const uint32_t kClientIFCW = 64 * 1024;
const uint32_t kServerIFCW = 1024 * 1024;
@@ -1223,7 +1219,7 @@
ASSERT_NE(server_connection, nullptr);
const QuicConnectionStats& server_stats = server_connection->GetStats();
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
EXPECT_EQ(server_stats.packets_sent_by_dispatcher, 1u);
} else {
EXPECT_EQ(server_stats.packets_sent_by_dispatcher, 0u);
@@ -1235,7 +1231,7 @@
EXPECT_EQ(dispatcher_stats.packets_enqueued_early, 1u);
EXPECT_EQ(dispatcher_stats.packets_enqueued_chlo, 0u);
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
EXPECT_EQ(dispatcher_stats.packets_sent, 1u);
} else {
EXPECT_EQ(dispatcher_stats.packets_sent, 0u);
@@ -1274,7 +1270,7 @@
const QuicDispatcherStats& dispatcher_stats = GetDispatcherStats();
EXPECT_EQ(dispatcher_stats.sessions_created, 1u);
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
// 2 CHLO packets are enqueued, but only the 1st caused a dispatcher ACK.
EXPECT_EQ(dispatcher_stats.packets_sent, 1u);
EXPECT_EQ(dispatcher_stats.packets_processed_with_unknown_cid, 2u);
@@ -1332,7 +1328,7 @@
EXPECT_EQ(dispatcher_stats.packets_enqueued_early, 1u);
EXPECT_EQ(dispatcher_stats.packets_processed_with_unknown_cid, 2u);
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
// 2 CHLO packets are enqueued, but only the 1st caused a dispatcher ACK.
EXPECT_EQ(dispatcher_stats.packets_sent, 1u);
} else {
@@ -1370,7 +1366,7 @@
ASSERT_NE(server_connection, nullptr);
const QuicConnectionStats& server_stats = server_connection->GetStats();
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
EXPECT_EQ(server_stats.packets_sent_by_dispatcher, 2u);
} else {
EXPECT_EQ(server_stats.packets_sent_by_dispatcher, 0u);
@@ -1383,7 +1379,7 @@
EXPECT_EQ(dispatcher_stats.packets_enqueued_early, 2u);
EXPECT_EQ(dispatcher_stats.packets_enqueued_chlo, 0u);
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
EXPECT_EQ(dispatcher_stats.packets_sent, 2u);
} else {
EXPECT_EQ(dispatcher_stats.packets_sent, 0u);
@@ -1417,7 +1413,7 @@
ASSERT_NE(server_connection, nullptr);
const QuicConnectionStats& server_stats = server_connection->GetStats();
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
EXPECT_EQ(server_stats.packets_sent_by_dispatcher, 1u);
} else {
EXPECT_EQ(server_stats.packets_sent_by_dispatcher, 0u);
@@ -1430,7 +1426,7 @@
EXPECT_EQ(dispatcher_stats.packets_enqueued_early, 2u);
EXPECT_EQ(dispatcher_stats.packets_enqueued_chlo, 0u);
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
EXPECT_EQ(dispatcher_stats.packets_sent, 1u);
} else {
EXPECT_EQ(dispatcher_stats.packets_sent, 0u);
@@ -1469,7 +1465,7 @@
const QuicDispatcherStats& dispatcher_stats = GetDispatcherStats();
EXPECT_EQ(dispatcher_stats.sessions_created, 1u);
- if (DispatcherAckEnabled() && version_ != ParsedQuicVersion::RFCv2()) {
+ if (version_ != ParsedQuicVersion::RFCv2()) {
// Packet 1 and Packet 2's retransmission caused dispatcher ACKs.
EXPECT_EQ(dispatcher_stats.packets_sent, 2u);
EXPECT_EQ(dispatcher_stats.packets_processed_with_unknown_cid, 3u);
diff --git a/quiche/quic/core/quic_buffered_packet_store.cc b/quiche/quic/core/quic_buffered_packet_store.cc
index bec282b..c881588 100644
--- a/quiche/quic/core/quic_buffered_packet_store.cc
+++ b/quiche/quic/core/quic_buffered_packet_store.cc
@@ -242,11 +242,6 @@
void QuicBufferedPacketStore::MaybeAckInitialPacket(
const ReceivedPacketInfo& packet_info, BufferedPacketList& packet_list) {
- if (!ack_buffered_initial_packets_) {
- return;
- }
-
- QUIC_RESTART_FLAG_COUNT_N(quic_dispatcher_ack_buffered_initial_packets, 1, 8);
if (writer_ == nullptr || writer_->IsWriteBlocked() ||
!packet_info.version.IsKnown() ||
!packet_list.HasAttemptedToReplaceConnectionId() ||
@@ -379,11 +374,6 @@
const BufferedPacketList* QuicBufferedPacketStore::GetPacketList(
const QuicConnectionId& connection_id) const {
- if (!ack_buffered_initial_packets_) {
- return nullptr;
- }
-
- QUIC_RESTART_FLAG_COUNT_N(quic_dispatcher_ack_buffered_initial_packets, 2, 8);
auto it = buffered_session_map_.find(connection_id);
if (it == buffered_session_map_.end()) {
return nullptr;
diff --git a/quiche/quic/core/quic_buffered_packet_store.h b/quiche/quic/core/quic_buffered_packet_store.h
index 80ebbc1..c430757 100644
--- a/quiche/quic/core/quic_buffered_packet_store.h
+++ b/quiche/quic/core/quic_buffered_packet_store.h
@@ -268,10 +268,6 @@
const BufferedPacketList* GetPacketList(
const QuicConnectionId& connection_id) const;
- bool ack_buffered_initial_packets() const {
- return ack_buffered_initial_packets_;
- }
-
private:
friend class test::QuicBufferedPacketStorePeer;
@@ -342,9 +338,6 @@
// This alarm fires every |connection_life_span_| to clean up
// packets staying in the store for too long.
std::unique_ptr<QuicAlarm> expiration_alarm_;
-
- const bool ack_buffered_initial_packets_ =
- GetQuicRestartFlag(quic_dispatcher_ack_buffered_initial_packets);
};
// Collects packets serialized by a QuicPacketCreator.
diff --git a/quiche/quic/core/quic_dispatcher.cc b/quiche/quic/core/quic_dispatcher.cc
index 1ffb383..cfae92b 100644
--- a/quiche/quic/core/quic_dispatcher.cc
+++ b/quiche/quic/core/quic_dispatcher.cc
@@ -136,10 +136,6 @@
// Always set encrypter with original_server_connection_id.
framer_.SetInitialObfuscators(original_server_connection_id);
if (last_sent_packet_number.IsInitialized()) {
- QUICHE_DCHECK(
- GetQuicRestartFlag(quic_dispatcher_ack_buffered_initial_packets));
- QUIC_RESTART_FLAG_COUNT_N(quic_dispatcher_ack_buffered_initial_packets, 3,
- 8);
creator_.set_packet_number(last_sent_packet_number);
}
}
@@ -328,17 +324,13 @@
#ifndef NDEBUG
// Consult the buffered packet store to see if the packet's DCID is a replaced
// cid generated by us, if so, increment a counter used only by tests.
- if (ack_buffered_initial_packets()) {
- const BufferedPacketList* packet_list =
- buffered_packets_.GetPacketList(packet_info.destination_connection_id);
- if (packet_list != nullptr &&
- packet_list->replaced_connection_id.has_value() &&
- *packet_list->replaced_connection_id ==
- packet_info.destination_connection_id) {
- QUIC_RESTART_FLAG_COUNT_N(quic_dispatcher_ack_buffered_initial_packets, 4,
- 8);
- ++stats_.packets_processed_with_replaced_cid_in_store;
- }
+ const BufferedPacketList* packet_list =
+ buffered_packets_.GetPacketList(packet_info.destination_connection_id);
+ if (packet_list != nullptr &&
+ packet_list->replaced_connection_id.has_value() &&
+ *packet_list->replaced_connection_id ==
+ packet_info.destination_connection_id) {
+ ++stats_.packets_processed_with_replaced_cid_in_store;
}
#endif
@@ -1037,7 +1029,6 @@
return;
}
- QUIC_RESTART_FLAG_COUNT_N(quic_dispatcher_ack_buffered_initial_packets, 5, 8);
StatelesslyTerminateConnection(
self_address, peer_address, packet_list->original_connection_id, format,
version_flag, use_length_prefix, version, error_code, error_details,
@@ -1076,39 +1067,25 @@
? replaced_connection_id->ToString()
: "n/a");
- if (ack_buffered_initial_packets()) {
- // |server_connection_id| is the original connection ID when flag is true.
- QuicConnectionId original_connection_id = server_connection_id;
- if (last_sent_packet_number.IsInitialized()) {
- QUIC_RESTART_FLAG_COUNT_N(quic_dispatcher_ack_buffered_initial_packets,
- 6, 8);
- }
+ // |server_connection_id| is the original connection ID when flag is true.
+ QuicConnectionId original_connection_id = server_connection_id;
- StatelessConnectionTerminator terminator(
- replaced_connection_id.value_or(original_connection_id),
- original_connection_id, version, last_sent_packet_number,
- helper_.get(), time_wait_list_manager_.get());
+ StatelessConnectionTerminator terminator(
+ replaced_connection_id.value_or(original_connection_id),
+ original_connection_id, version, last_sent_packet_number, helper_.get(),
+ time_wait_list_manager_.get());
- std::vector<QuicConnectionId> active_connection_ids = {
- original_connection_id};
- if (replaced_connection_id.has_value()) {
- active_connection_ids.push_back(*replaced_connection_id);
- }
- // This also adds the connection to time wait list.
- terminator.CloseConnection(error_code, error_details,
- format != GOOGLE_QUIC_PACKET,
- /*active_connection_ids=*/
- std::move(active_connection_ids));
- } else {
- StatelessConnectionTerminator terminator(
- server_connection_id, server_connection_id, version,
- last_sent_packet_number, helper_.get(),
- time_wait_list_manager_.get());
- // This also adds the connection to time wait list.
- terminator.CloseConnection(
- error_code, error_details, format != GOOGLE_QUIC_PACKET,
- /*active_connection_ids=*/{server_connection_id});
+ std::vector<QuicConnectionId> active_connection_ids = {
+ original_connection_id};
+ if (replaced_connection_id.has_value()) {
+ active_connection_ids.push_back(*replaced_connection_id);
}
+ // This also adds the connection to time wait list.
+ terminator.CloseConnection(error_code, error_details,
+ format != GOOGLE_QUIC_PACKET,
+ /*active_connection_ids=*/
+ std::move(active_connection_ids));
+
QUIC_CODE_COUNT(quic_dispatcher_generated_connection_close);
QuicSession::RecordConnectionCloseAtServer(
error_code, ConnectionCloseSource::FROM_SELF);
@@ -1146,7 +1123,7 @@
// TODO(wub): Remove |server_connection_id| because |early_arrived_packets|
// already contains the original and replaced connection ID.
void QuicDispatcher::OnExpiredPackets(
- QuicConnectionId server_connection_id,
+ QuicConnectionId /*server_connection_id*/,
BufferedPacketList early_arrived_packets) {
QUIC_CODE_COUNT(quic_reject_buffered_packets_expired);
QuicErrorCode error_code = QUIC_HANDSHAKE_FAILED_PACKETS_BUFFERED_TOO_LONG;
@@ -1156,32 +1133,17 @@
peer_address = early_arrived_packets.buffered_packets.front().peer_address;
}
- if (ack_buffered_initial_packets()) {
- QUIC_RESTART_FLAG_COUNT_N(quic_dispatcher_ack_buffered_initial_packets, 7,
- 8);
- StatelesslyTerminateConnection(
- self_address, peer_address,
- early_arrived_packets.original_connection_id,
- early_arrived_packets.ietf_quic ? IETF_QUIC_LONG_HEADER_PACKET
- : GOOGLE_QUIC_PACKET,
- /*version_flag=*/true,
- early_arrived_packets.version.HasLengthPrefixedConnectionIds(),
- early_arrived_packets.version, error_code,
- "Packets buffered for too long",
- quic::QuicTimeWaitListManager::SEND_STATELESS_RESET,
- early_arrived_packets.replaced_connection_id,
- early_arrived_packets.GetLastSentPacketNumber());
- } else {
- StatelesslyTerminateConnection(
- self_address, peer_address, server_connection_id,
- early_arrived_packets.ietf_quic ? IETF_QUIC_LONG_HEADER_PACKET
- : GOOGLE_QUIC_PACKET,
- /*version_flag=*/true,
- early_arrived_packets.version.HasLengthPrefixedConnectionIds(),
- early_arrived_packets.version, error_code,
- "Packets buffered for too long",
- quic::QuicTimeWaitListManager::SEND_STATELESS_RESET);
- }
+ StatelesslyTerminateConnection(
+ self_address, peer_address, early_arrived_packets.original_connection_id,
+ early_arrived_packets.ietf_quic ? IETF_QUIC_LONG_HEADER_PACKET
+ : GOOGLE_QUIC_PACKET,
+ /*version_flag=*/true,
+ early_arrived_packets.version.HasLengthPrefixedConnectionIds(),
+ early_arrived_packets.version, error_code,
+ "Packets buffered for too long",
+ quic::QuicTimeWaitListManager::SEND_STATELESS_RESET,
+ early_arrived_packets.replaced_connection_id,
+ early_arrived_packets.GetLastSentPacketNumber());
}
void QuicDispatcher::ProcessBufferedChlos(size_t max_connections_to_create) {
@@ -1411,9 +1373,7 @@
} else {
QUIC_CODE_COUNT(quic_connection_created_single_packet_chlo);
}
- if (ack_buffered_initial_packets() && !dispatcher_sent_packets.empty()) {
- QUIC_RESTART_FLAG_COUNT_N(quic_dispatcher_ack_buffered_initial_packets, 8,
- 8);
+ if (!dispatcher_sent_packets.empty()) {
session->connection()->AddDispatcherSentPackets(dispatcher_sent_packets);
}
diff --git a/quiche/quic/core/quic_dispatcher.h b/quiche/quic/core/quic_dispatcher.h
index 7701a46..7678bbb 100644
--- a/quiche/quic/core/quic_dispatcher.h
+++ b/quiche/quic/core/quic_dispatcher.h
@@ -427,10 +427,6 @@
ConnectionIdGeneratorInterface* connection_id_generator,
absl::Span<const DispatcherSentPacket> dispatcher_sent_packets);
- bool ack_buffered_initial_packets() const {
- return buffered_packets_.ack_buffered_initial_packets();
- }
-
QuicDispatcherStats stats_;
const QuicConfig* config_;
diff --git a/quiche/quic/core/tls_chlo_extractor.cc b/quiche/quic/core/tls_chlo_extractor.cc
index 996cd79..7466642 100644
--- a/quiche/quic/core/tls_chlo_extractor.cc
+++ b/quiche/quic/core/tls_chlo_extractor.cc
@@ -212,15 +212,13 @@
}
// QuicFramer is constructed without knowledge of the server's connection ID
// so it needs to be set up here in order to decrypt the packet.
- if (GetQuicRestartFlag(quic_dispatcher_ack_buffered_initial_packets)) {
- // Only call SetInitialObfuscators once for the first ingested packet, whose
- // |header.destination_connection_id| is the original connection ID.
- if (framer_->GetDecrypter(ENCRYPTION_INITIAL) == nullptr) {
- framer_->SetInitialObfuscators(header.destination_connection_id);
- }
- } else {
+ //
+ // Only call SetInitialObfuscators once for the first ingested packet, whose
+ // |header.destination_connection_id| is the original connection ID.
+ if (framer_->GetDecrypter(ENCRYPTION_INITIAL) == nullptr) {
framer_->SetInitialObfuscators(header.destination_connection_id);
}
+
return true;
}