Deprecate gfe2_reloadable_flag_quic_stream_id_manager_handles_accounting.
PiperOrigin-RevId: 314205564
Change-Id: I10fc6c0c96255bb5bee3bdc8aa2e278bb705cf98
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index f527271..8b350ee 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -3307,7 +3307,9 @@
// though more resources need to be pushed.
if (!version_.HasIetfQuicFrames()) {
server_thread_->Pause();
- EXPECT_EQ(kNumMaxStreams, GetServerSession()->GetNumOpenOutgoingStreams());
+ EXPECT_EQ(kNumMaxStreams,
+ QuicSessionPeer::GetStreamIdManager(GetServerSession())
+ ->num_open_outgoing_streams());
server_thread_->Resume();
}
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index ba22c81..f35e2fc 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -240,7 +240,7 @@
TestStream* CreateIncomingStream(QuicStreamId id) override {
// Enforce the limit on the number of open streams.
if (!VersionHasIetfQuicFrames(connection()->transport_version()) &&
- GetNumOpenIncomingStreams() + 1 >
+ stream_id_manager().num_open_incoming_streams() + 1 >
max_open_incoming_bidirectional_streams()) {
connection()->CloseConnection(
QUIC_TOO_MANY_OPEN_STREAMS, "Too many streams!",
diff --git a/quic/core/legacy_quic_stream_id_manager.cc b/quic/core/legacy_quic_stream_id_manager.cc
index 6120f85..af4de8b 100644
--- a/quic/core/legacy_quic_stream_id_manager.cc
+++ b/quic/core/legacy_quic_stream_id_manager.cc
@@ -31,42 +31,20 @@
: QuicUtils::GetCryptoStreamId(transport_version_))
: QuicUtils::GetInvalidStreamId(transport_version_)),
num_open_incoming_streams_(0),
- num_open_outgoing_streams_(0),
- handles_accounting_(
- GetQuicReloadableFlag(quic_stream_id_manager_handles_accounting)) {
- if (handles_accounting_) {
- QUIC_RELOADABLE_FLAG_COUNT(quic_stream_id_manager_handles_accounting);
- }
-}
+ num_open_outgoing_streams_(0) {}
LegacyQuicStreamIdManager::~LegacyQuicStreamIdManager() {}
-bool LegacyQuicStreamIdManager::CanOpenNextOutgoingStream(
- size_t current_num_open_outgoing_streams) const {
- if (handles_accounting_) {
- DCHECK_LE(num_open_outgoing_streams_, max_open_outgoing_streams_);
- QUIC_DLOG_IF(INFO, num_open_outgoing_streams_ == max_open_outgoing_streams_)
- << "Failed to create a new outgoing stream. "
- << "Already " << num_open_outgoing_streams_ << " open.";
- return num_open_outgoing_streams_ < max_open_outgoing_streams_;
- }
- if (current_num_open_outgoing_streams >= max_open_outgoing_streams_) {
- QUIC_DLOG(INFO) << "Failed to create a new outgoing stream. "
- << "Already " << current_num_open_outgoing_streams
- << " open.";
- return false;
- }
- return true;
+bool LegacyQuicStreamIdManager::CanOpenNextOutgoingStream() const {
+ DCHECK_LE(num_open_outgoing_streams_, max_open_outgoing_streams_);
+ QUIC_DLOG_IF(INFO, num_open_outgoing_streams_ == max_open_outgoing_streams_)
+ << "Failed to create a new outgoing stream. "
+ << "Already " << num_open_outgoing_streams_ << " open.";
+ return num_open_outgoing_streams_ < max_open_outgoing_streams_;
}
-bool LegacyQuicStreamIdManager::CanOpenIncomingStream(
- size_t current_num_open_incoming_streams) const {
- if (handles_accounting_) {
- return num_open_incoming_streams_ < max_open_incoming_streams_;
- }
- // Check if the new number of open streams would cause the number of
- // open streams to exceed the limit.
- return current_num_open_incoming_streams < max_open_incoming_streams_;
+bool LegacyQuicStreamIdManager::CanOpenIncomingStream() const {
+ return num_open_incoming_streams_ < max_open_incoming_streams_;
}
bool LegacyQuicStreamIdManager::MaybeIncreaseLargestPeerStreamId(
@@ -121,7 +99,6 @@
}
void LegacyQuicStreamIdManager::ActivateStream(bool is_incoming) {
- DCHECK(handles_accounting_);
if (is_incoming) {
++num_open_incoming_streams_;
return;
@@ -130,7 +107,6 @@
}
void LegacyQuicStreamIdManager::OnStreamClosed(bool is_incoming) {
- DCHECK(handles_accounting_);
if (is_incoming) {
QUIC_BUG_IF(num_open_incoming_streams_ == 0);
--num_open_incoming_streams_;
diff --git a/quic/core/legacy_quic_stream_id_manager.h b/quic/core/legacy_quic_stream_id_manager.h
index 6c1309e..0131587 100644
--- a/quic/core/legacy_quic_stream_id_manager.h
+++ b/quic/core/legacy_quic_stream_id_manager.h
@@ -29,11 +29,10 @@
~LegacyQuicStreamIdManager();
// Returns true if the next outgoing stream ID can be allocated.
- bool CanOpenNextOutgoingStream(
- size_t current_num_open_outgoing_streams) const;
+ bool CanOpenNextOutgoingStream() const;
// Returns true if a new incoming stream can be opened.
- bool CanOpenIncomingStream(size_t current_num_open_incoming_streams) const;
+ bool CanOpenIncomingStream() const;
// Returns false when increasing the largest created stream id to |id| would
// violate the limit, so the connection should be closed.
@@ -95,8 +94,6 @@
return num_open_outgoing_streams_;
}
- bool handles_accounting() const { return handles_accounting_; }
-
private:
friend class test::QuicSessionPeer;
@@ -118,16 +115,11 @@
QuicStreamId largest_peer_created_stream_id_;
- // A counter for peer initiated open streams. Used when handles_accounting_ is
- // true.
+ // A counter for peer initiated open streams.
size_t num_open_incoming_streams_;
- // A counter for self initiated open streams. Used when handles_accounting_ is
- // true.
+ // A counter for self initiated open streams.
size_t num_open_outgoing_streams_;
-
- // Latched value of quic_stream_id_manager_handles_accounting.
- const bool handles_accounting_;
};
} // namespace quic
diff --git a/quic/core/legacy_quic_stream_id_manager_test.cc b/quic/core/legacy_quic_stream_id_manager_test.cc
index 00654b4..b7ba1d2 100644
--- a/quic/core/legacy_quic_stream_id_manager_test.cc
+++ b/quic/core/legacy_quic_stream_id_manager_test.cc
@@ -78,33 +78,21 @@
::testing::PrintToStringParamName());
TEST_P(LegacyQuicStreamIdManagerTest, CanOpenNextOutgoingStream) {
- if (GetQuicReloadableFlag(quic_stream_id_manager_handles_accounting)) {
- for (size_t i = 0; i < manager_.max_open_outgoing_streams() - 1; ++i) {
- manager_.ActivateStream(/*is_incoming=*/false);
- }
- }
- EXPECT_TRUE(manager_.CanOpenNextOutgoingStream(
- manager_.max_open_outgoing_streams() - 1));
- if (GetQuicReloadableFlag(quic_stream_id_manager_handles_accounting)) {
+ for (size_t i = 0; i < manager_.max_open_outgoing_streams() - 1; ++i) {
manager_.ActivateStream(/*is_incoming=*/false);
}
- EXPECT_FALSE(
- manager_.CanOpenNextOutgoingStream(manager_.max_open_outgoing_streams()));
+ EXPECT_TRUE(manager_.CanOpenNextOutgoingStream());
+ manager_.ActivateStream(/*is_incoming=*/false);
+ EXPECT_FALSE(manager_.CanOpenNextOutgoingStream());
}
TEST_P(LegacyQuicStreamIdManagerTest, CanOpenIncomingStream) {
- if (GetQuicReloadableFlag(quic_stream_id_manager_handles_accounting)) {
- for (size_t i = 0; i < manager_.max_open_incoming_streams() - 1; ++i) {
- manager_.ActivateStream(/*is_incoming=*/true);
- }
- }
- EXPECT_TRUE(
- manager_.CanOpenIncomingStream(manager_.max_open_incoming_streams() - 1));
- if (GetQuicReloadableFlag(quic_stream_id_manager_handles_accounting)) {
+ for (size_t i = 0; i < manager_.max_open_incoming_streams() - 1; ++i) {
manager_.ActivateStream(/*is_incoming=*/true);
}
- EXPECT_FALSE(
- manager_.CanOpenIncomingStream(manager_.max_open_incoming_streams()));
+ EXPECT_TRUE(manager_.CanOpenIncomingStream());
+ manager_.ActivateStream(/*is_incoming=*/true);
+ EXPECT_FALSE(manager_.CanOpenIncomingStream());
}
TEST_P(LegacyQuicStreamIdManagerTest, AvailableStreams) {
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 7fb52dd..218384f 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -73,12 +73,10 @@
config_.GetMaxBidirectionalStreamsToSend(),
config_.GetMaxUnidirectionalStreamsToSend() +
num_expected_unidirectional_static_streams),
- num_dynamic_incoming_streams_(0),
num_draining_incoming_streams_(0),
num_draining_outgoing_streams_(0),
num_outgoing_static_streams_(0),
num_incoming_static_streams_(0),
- num_locally_closed_incoming_streams_highest_offset_(0),
flow_controller_(
this,
QuicUtils::GetInvalidStreamId(connection->transport_version()),
@@ -137,16 +135,6 @@
QuicSession::~QuicSession() {
QUIC_LOG_IF(WARNING, !zombie_streams_.empty()) << "Still have zombie streams";
- QUIC_LOG_IF(WARNING, num_locally_closed_incoming_streams_highest_offset() >
- stream_id_manager_.max_open_incoming_streams())
- << "Surprisingly high number of locally closed peer initiated streams"
- "still waiting for final byte offset: "
- << num_locally_closed_incoming_streams_highest_offset();
- QUIC_LOG_IF(WARNING, GetNumLocallyClosedOutgoingStreamsHighestOffset() >
- stream_id_manager_.max_open_outgoing_streams())
- << "Surprisingly high number of locally closed self initiated streams"
- "still waiting for final byte offset: "
- << GetNumLocallyClosedOutgoingStreamsHighestOffset();
}
void QuicSession::PendingStreamOnStreamFrame(const QuicStreamFrame& frame) {
@@ -879,9 +867,6 @@
const QuicStreamId id,
QuicStreamOffset offset) {
locally_closed_streams_highest_offset_[id] = offset;
- if (IsIncomingStream(id)) {
- ++num_locally_closed_incoming_streams_highest_offset_;
- }
}
void QuicSession::OnStreamClosed(QuicStreamId stream_id) {
@@ -918,9 +903,6 @@
InsertLocallyClosedStreamsHighestOffset(
stream_id, stream->flow_controller()->highest_received_byte_offset());
stream_map_.erase(it);
- if (IsIncomingStream(stream_id)) {
- --num_dynamic_incoming_streams_;
- }
return;
}
@@ -928,9 +910,6 @@
QUIC_DVLOG_IF(1, stream_was_draining)
<< ENDPOINT << "Stream " << stream_id << " was draining";
stream_map_.erase(it);
- if (IsIncomingStream(stream_id)) {
- --num_dynamic_incoming_streams_;
- }
if (stream_was_draining) {
if (IsIncomingStream(stream_id)) {
QUIC_BUG_IF(num_draining_incoming_streams_ == 0);
@@ -948,8 +927,7 @@
// disconnected.
return;
}
- if (stream_id_manager_.handles_accounting() &&
- !VersionHasIetfQuicFrames(transport_version())) {
+ if (!VersionHasIetfQuicFrames(transport_version())) {
stream_id_manager_.OnStreamClosed(
/*is_incoming=*/IsIncomingStream(stream_id));
}
@@ -1004,13 +982,11 @@
flow_controller_.AddBytesConsumed(offset_diff);
locally_closed_streams_highest_offset_.erase(it);
- if (stream_id_manager_.handles_accounting() &&
- !VersionHasIetfQuicFrames(transport_version())) {
+ if (!VersionHasIetfQuicFrames(transport_version())) {
stream_id_manager_.OnStreamClosed(
/*is_incoming=*/IsIncomingStream(stream_id));
}
if (IsIncomingStream(stream_id)) {
- --num_locally_closed_incoming_streams_highest_offset_;
if (VersionHasIetfQuicFrames(transport_version())) {
v99_streamid_manager_.OnStreamClosed(stream_id);
}
@@ -1588,14 +1564,12 @@
<< ". activating stream " << stream_id;
DCHECK(!QuicContainsKey(stream_map_, stream_id));
stream_map_[stream_id] = std::move(stream);
- if (IsIncomingStream(stream_id)) {
- is_static ? ++num_incoming_static_streams_
- : ++num_dynamic_incoming_streams_;
- } else if (is_static) {
- ++num_outgoing_static_streams_;
+ if (is_static) {
+ IsIncomingStream(stream_id) ? ++num_incoming_static_streams_
+ : ++num_outgoing_static_streams_;
+ return;
}
- if (stream_id_manager_.handles_accounting() && !is_static &&
- !VersionHasIetfQuicFrames(transport_version())) {
+ if (!VersionHasIetfQuicFrames(transport_version())) {
// Do not inform stream ID manager of static streams.
stream_id_manager_.ActivateStream(
/*is_incoming=*/IsIncomingStream(stream_id));
@@ -1618,8 +1592,7 @@
bool QuicSession::CanOpenNextOutgoingBidirectionalStream() {
if (!VersionHasIetfQuicFrames(transport_version())) {
- return stream_id_manager_.CanOpenNextOutgoingStream(
- GetNumOpenOutgoingStreams());
+ return stream_id_manager_.CanOpenNextOutgoingStream();
}
if (v99_streamid_manager_.CanOpenNextOutgoingBidirectionalStream()) {
return true;
@@ -1635,8 +1608,7 @@
bool QuicSession::CanOpenNextOutgoingUnidirectionalStream() {
if (!VersionHasIetfQuicFrames(transport_version())) {
- return stream_id_manager_.CanOpenNextOutgoingStream(
- GetNumOpenOutgoingStreams());
+ return stream_id_manager_.CanOpenNextOutgoingStream();
}
if (v99_streamid_manager_.CanOpenNextOutgoingUnidirectionalStream()) {
return true;
@@ -1685,15 +1657,11 @@
return nullptr;
}
- if (!VersionHasIetfQuicFrames(transport_version())) {
- // TODO(fayang): Let LegacyQuicStreamIdManager count open streams and make
- // CanOpenIncomingStream interface consistent with that of v99.
- if (!stream_id_manager_.CanOpenIncomingStream(
- GetNumOpenIncomingStreams())) {
- // Refuse to open the stream.
- ResetStream(stream_id, QUIC_REFUSED_STREAM, 0);
- return nullptr;
- }
+ if (!VersionHasIetfQuicFrames(transport_version()) &&
+ !stream_id_manager_.CanOpenIncomingStream()) {
+ // Refuse to open the stream.
+ ResetStream(stream_id, QUIC_REFUSED_STREAM, 0);
+ return nullptr;
}
return CreateIncomingStream(stream_id);
@@ -1704,7 +1672,7 @@
QUIC_DVLOG(1) << ENDPOINT << "Stream " << stream_id << " is draining";
if (VersionHasIetfQuicFrames(transport_version())) {
v99_streamid_manager_.OnStreamClosed(stream_id);
- } else if (stream_id_manager_.handles_accounting()) {
+ } else {
stream_id_manager_.OnStreamClosed(
/*is_incoming=*/IsIncomingStream(stream_id));
}
@@ -1830,31 +1798,8 @@
return it->second->is_static();
}
-size_t QuicSession::GetNumOpenIncomingStreams() const {
- DCHECK(!VersionHasIetfQuicFrames(transport_version()));
- if (stream_id_manager_.handles_accounting()) {
- return stream_id_manager_.num_open_incoming_streams();
- }
- return num_dynamic_incoming_streams_ - num_draining_incoming_streams_ +
- num_locally_closed_incoming_streams_highest_offset_;
-}
-
-size_t QuicSession::GetNumOpenOutgoingStreams() const {
- DCHECK(!VersionHasIetfQuicFrames(transport_version()));
- if (stream_id_manager_.handles_accounting()) {
- return stream_id_manager_.num_open_outgoing_streams();
- }
- DCHECK_GE(GetNumDynamicOutgoingStreams() +
- GetNumLocallyClosedOutgoingStreamsHighestOffset(),
- GetNumDrainingOutgoingStreams());
- return GetNumDynamicOutgoingStreams() +
- GetNumLocallyClosedOutgoingStreamsHighestOffset() -
- GetNumDrainingOutgoingStreams();
-}
-
size_t QuicSession::GetNumActiveStreams() const {
- if (!VersionHasIetfQuicFrames(transport_version()) &&
- stream_id_manager_.handles_accounting()) {
+ if (!VersionHasIetfQuicFrames(transport_version())) {
// Exclude locally_closed_streams when determine whether to keep connection
// alive.
return stream_id_manager_.num_open_incoming_streams() +
@@ -1897,27 +1842,10 @@
control_frame_manager_.WritePing();
}
-size_t QuicSession::GetNumDynamicOutgoingStreams() const {
- DCHECK_GE(
- static_cast<size_t>(stream_map_.size() + pending_stream_map_.size()),
- num_dynamic_incoming_streams_ + num_outgoing_static_streams_ +
- num_incoming_static_streams_);
- return stream_map_.size() + pending_stream_map_.size() -
- num_dynamic_incoming_streams_ - num_outgoing_static_streams_ -
- num_incoming_static_streams_;
-}
-
size_t QuicSession::GetNumDrainingOutgoingStreams() const {
return num_draining_outgoing_streams_;
}
-size_t QuicSession::GetNumLocallyClosedOutgoingStreamsHighestOffset() const {
- DCHECK_GE(locally_closed_streams_highest_offset_.size(),
- num_locally_closed_incoming_streams_highest_offset_);
- return locally_closed_streams_highest_offset_.size() -
- num_locally_closed_incoming_streams_highest_offset_;
-}
-
bool QuicSession::IsConnectionFlowControlBlocked() const {
return flow_controller_.IsBlocked();
}
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index d7400d5..c156a6e 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -334,20 +334,6 @@
// Returns the number of currently draining streams.
size_t GetNumDrainingStreams() const;
- // Returns the number of currently open peer initiated streams, excluding
- // static streams.
- // TODO(fayang): remove this and instead use
- // LegacyStreamIdManager::num_open_incoming_streams() in tests when
- // deprecating quic_stream_id_manager_handles_accounting.
- size_t GetNumOpenIncomingStreams() const;
-
- // Returns the number of currently open self initiated streams, excluding
- // static streams.
- // TODO(fayang): remove this and instead use
- // LegacyStreamIdManager::num_open_outgoing_streams() in tests when
- // deprecating quic_stream_id_manager_handles_accounting.
- size_t GetNumOpenOutgoingStreams() const;
-
// Returns the number of open peer initiated static streams.
size_t num_incoming_static_streams() const {
return num_incoming_static_streams_;
@@ -448,12 +434,6 @@
// Return true if given stream is peer initiated.
bool IsIncomingStream(QuicStreamId id) const;
- size_t GetNumLocallyClosedOutgoingStreamsHighestOffset() const;
-
- size_t num_locally_closed_incoming_streams_highest_offset() const {
- return num_locally_closed_incoming_streams_highest_offset_;
- }
-
// Record errors when a connection is closed at the server side, should only
// be called from server's perspective.
// Noop if |error| is QUIC_NO_ERROR.
@@ -591,8 +571,6 @@
return &write_blocked_streams_;
}
- size_t GetNumDynamicOutgoingStreams() const;
-
size_t GetNumDrainingOutgoingStreams() const;
// Returns true if the stream is still active.
@@ -772,37 +750,26 @@
// Manages stream IDs for version99/IETF QUIC
UberQuicStreamIdManager v99_streamid_manager_;
- // A counter for peer initiated dynamic streams which are in the stream_map_.
- // TODO(fayang): Remove this when deprecating
- // quic_stream_id_manager_handles_accounting.
- size_t num_dynamic_incoming_streams_;
-
// A counter for peer initiated streams which have sent and received FIN but
// waiting for application to consume data.
- // TODO(fayang): Remove this when deprecating
- // quic_stream_id_manager_handles_accounting.
+ // TODO(fayang): Merge num_draining_incoming_streams_ and
+ // num_draining_outgoing_streams_.
size_t num_draining_incoming_streams_;
// A counter for self initiated streams which have sent and received FIN but
// waiting for application to consume data.
- // TODO(fayang): Remove this when deprecating
- // quic_stream_id_manager_handles_accounting.
size_t num_draining_outgoing_streams_;
// A counter for self initiated static streams which are in
// stream_map_.
+ // TODO(fayang): Merge num_outgoing_static_streams_ and
+ // num_incoming_static_streams_.
size_t num_outgoing_static_streams_;
// A counter for peer initiated static streams which are in
// stream_map_.
size_t num_incoming_static_streams_;
- // A counter for peer initiated streams which are in the
- // locally_closed_streams_highest_offset_.
- // TODO(fayang): Remove this when deprecating
- // quic_stream_id_manager_handles_accounting.
- size_t num_locally_closed_incoming_streams_highest_offset_;
-
// Received information for a connection close.
QuicConnectionCloseFrame on_closed_frame_;
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc
index ad10f43..d2ff9f8 100644
--- a/quic/core/quic_session_test.cc
+++ b/quic/core/quic_session_test.cc
@@ -230,7 +230,7 @@
TestStream* CreateIncomingStream(QuicStreamId id) override {
// Enforce the limit on the number of open streams.
if (!VersionHasIetfQuicFrames(connection()->transport_version()) &&
- GetNumOpenIncomingStreams() + 1 >
+ stream_id_manager().num_open_incoming_streams() + 1 >
max_open_incoming_bidirectional_streams()) {
// No need to do this test for version 99; it's done by
// QuicSession::GetOrCreateStream.