False deprecate --gfe2_reloadable_flag_quic_fix_ignore_read_data_when_unblocked as it does not work per b/488057588#comment14. PiperOrigin-RevId: 886958346
diff --git a/quiche/common/quiche_feature_flags_list.h b/quiche/common/quiche_feature_flags_list.h index ed32c81..cc30164 100755 --- a/quiche/common/quiche_feature_flags_list.h +++ b/quiche/common/quiche_feature_flags_list.h
@@ -44,7 +44,6 @@ QUICHE_FLAG(bool, quiche_reloadable_flag_quic_enobufs_blocked, true, true, "If true, ENOBUFS socket errors are reported as socket blocked instead of socket failure.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_fin_before_completed_http_headers, false, true, "If true, close the connection with error if FIN is received before finish receiving the whole HTTP headers.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_fix_gap_filling_ack_logic, false, false, "If true, fix the gap filling ack logic in QuicAckFrame.") -QUICHE_FLAG(bool, quiche_reloadable_flag_quic_fix_ignore_read_data_when_unblocked, false, false, "If true, correctly handle ignore_read_data case when sequencer gets unblocked.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_fix_timeouts, true, true, "If true, postpone setting handshake timeout to infinite to handshake complete.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_include_datagrams_in_willing_to_write, false, false, "If true, checks for queued datagrams when determining if a connection is willing to write.") QUICHE_FLAG(bool, quiche_reloadable_flag_quic_move_clock_now, false, false, "If true, move the call to clock.Now() in QuicPacketReader::ReadAndDispatchPackets to after socket_api_.ReadMultiplePackets().")
diff --git a/quiche/quic/core/http/quic_spdy_stream_test.cc b/quiche/quic/core/http/quic_spdy_stream_test.cc index 3038037..11de5f4 100644 --- a/quiche/quic/core/http/quic_spdy_stream_test.cc +++ b/quiche/quic/core/http/quic_spdy_stream_test.cc
@@ -3835,66 +3835,6 @@ } } -// Regression test for b/488057588. -TEST_P(QuicSpdyStreamTest, ReadSideNotClosedAfterStopReading) { - if (!IsIetfQuic()) { - return; - } - SetQuicReloadableFlag(quic_clear_body_manager_along_with_sequencer, true); - - Initialize(kShouldProcessData); - - QuicHeaderList headers = ProcessHeaders(false, headers_); - stream_->ConsumeHeaderList(); - - // In Envoy QUIC, application can stop processing data before getting read - // blocked. - stream_->set_should_process_data(false); - std::string body = "this is the body"; - std::string data = DataFrame(body); - QuicStreamOffset offset = 0; - QuicStreamFrame frame1(GetNthClientInitiatedBidirectionalId(0), /*fin=*/false, - offset, data); - offset += data.size(); - stream_->OnStreamFrame(frame1); - EXPECT_TRUE(stream_->sequencer()->HasBytesToRead()); - EXPECT_TRUE(QuicSpdyStreamPeer::BodyManager(stream_).HasBytesToRead()); - - // In Envoy QUIC, StopReading can be called after local reset. - stream_->StopReading(); - // Sequencer is not closed but the bytes in body_manager is cleared. - EXPECT_FALSE(stream_->sequencer()->IsClosed()); - EXPECT_FALSE(QuicSpdyStreamPeer::BodyManager(stream_).HasBytesToRead()); - - // QUIC gets blocked. - stream_->sequencer()->SetBlockedUntilFlush(); - - // FIN does not close the read side since the stream is blocked. - QuicStreamFrame frame2(GetNthClientInitiatedBidirectionalId(0), /*fin=*/true, - offset, "second body"); - stream_->OnStreamFrame(frame2); - EXPECT_FALSE(stream_->sequencer()->IsClosed()); - - // Because sequencer has bytes to read, On DataAvailable is called. - // However, since neither body_manager has bytes to read nor sequencer is - // closed, OnBodyAvailable is not called to close the read side when - // SetUnblocked is called. - EXPECT_FALSE(QuicSpdyStreamPeer::BodyManager(stream_).HasBytesToRead()); - EXPECT_FALSE(stream_->sequencer()->IsClosed()); - EXPECT_TRUE(stream_->sequencer()->HasBytesToRead()); - - // Application gets unblocked. - stream_->set_should_process_data(true); - // QUIC gets unblocked. - stream_->sequencer()->SetUnblocked(); - - if (GetQuicReloadableFlag(quic_fix_ignore_read_data_when_unblocked)) { - EXPECT_TRUE(stream_->read_side_closed()); - } else { - EXPECT_FALSE(stream_->read_side_closed()); - } -} - } // namespace } // namespace test } // namespace quic
diff --git a/quiche/quic/core/quic_stream_sequencer.cc b/quiche/quic/core/quic_stream_sequencer.cc index dcb6252..13a1668 100644 --- a/quiche/quic/core/quic_stream_sequencer.cc +++ b/quiche/quic/core/quic_stream_sequencer.cc
@@ -24,7 +24,6 @@ #include "quiche/quic/platform/api/quic_flags.h" #include "quiche/quic/platform/api/quic_logging.h" #include "quiche/quic/platform/api/quic_stack_trace.h" -#include "quiche/common/platform/api/quiche_flag_utils.h" namespace quic { @@ -266,16 +265,6 @@ void QuicStreamSequencer::SetUnblocked() { blocked_ = false; - if (GetQuicReloadableFlag(quic_fix_ignore_read_data_when_unblocked)) { - QUICHE_RELOADABLE_FLAG_COUNT_N(quic_fix_ignore_read_data_when_unblocked, 1, - 2); - if (ignore_read_data_) { - QUICHE_RELOADABLE_FLAG_COUNT_N(quic_fix_ignore_read_data_when_unblocked, - 2, 2); - FlushBufferedFrames(); - return; - } - } if (IsClosed() || HasBytesToRead()) { stream_->OnDataAvailable(); }