Skip to content

Commit

Permalink
StreamIdSet for peer stream groups seen.
Browse files Browse the repository at this point in the history
Summary: As in title. Missed this one. We also have to have two sets for unidirectional/bidirectional groups.

Reviewed By: sharmafb

Differential Revision: D52436642

fbshipit-source-id: 188682861e7aedebc52a28267be41544f1b4a47f
  • Loading branch information
Matt Joras authored and facebook-github-bot committed Dec 28, 2023
1 parent e0acbf8 commit 6c6c95a
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 15 deletions.
2 changes: 1 addition & 1 deletion quic/codec/Types.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
namespace quic {

using StreamId = uint64_t;
using StreamGroupId = uint64_t;
using StreamGroupId = StreamId;

enum class PacketNumberSpace : uint8_t {
Initial,
Expand Down
12 changes: 8 additions & 4 deletions quic/state/QuicStreamManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,10 +334,14 @@ QuicStreamManager::createNextUnidirectionalStream(
QuicStreamState* FOLLY_NULLABLE QuicStreamManager::instantiatePeerStream(
StreamId streamId,
folly::Optional<StreamGroupId> groupId) {
if (groupId &&
(peerStreamGroupsSeen_.find(*groupId) == peerStreamGroupsSeen_.cend())) {
newPeerStreamGroups_.insert(*groupId);
peerStreamGroupsSeen_.insert(*groupId);
if (groupId) {
auto& seenSet = isUnidirectionalStream(streamId)
? peerUnidirectionalStreamGroupsSeen_
: peerBidirectionalStreamGroupsSeen_;
if (!seenSet.contains(*groupId)) {
newPeerStreamGroups_.insert(*groupId);
seenSet.add(*groupId);
}
}

if (transportSettings_->notifyOnNewStreamsExplicitly) {
Expand Down
16 changes: 12 additions & 4 deletions quic/state/QuicStreamManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ class QuicStreamManager {
initialLocalUnidirectionalStreamId_ = 0x03;
initialRemoteBidirectionalStreamId_ = 0x00;
initialRemoteUnidirectionalStreamId_ = 0x02;
peerUnidirectionalStreamGroupsSeen_ = StreamIdSet(0x02);
peerBidirectionalStreamGroupsSeen_ = StreamIdSet(0x00);
} else {
nextAcceptablePeerBidirectionalStreamId_ = 0x01;
nextAcceptablePeerUnidirectionalStreamId_ = 0x03;
Expand All @@ -111,6 +113,8 @@ class QuicStreamManager {
initialLocalUnidirectionalStreamId_ = 0x02;
initialRemoteBidirectionalStreamId_ = 0x01;
initialRemoteUnidirectionalStreamId_ = 0x03;
peerUnidirectionalStreamGroupsSeen_ = StreamIdSet(0x03);
peerBidirectionalStreamGroupsSeen_ = StreamIdSet(0x01);
}
nextBidirectionalStreamGroupId_ = nextBidirectionalStreamId_;
nextUnidirectionalStreamGroupId_ = nextUnidirectionalStreamId_;
Expand Down Expand Up @@ -188,7 +192,8 @@ class QuicStreamManager {
std::move(other.openUnidirectionalLocalStreamGroups_);
newPeerStreams_ = std::move(other.newPeerStreams_);
newPeerStreamGroups_ = std::move(other.newPeerStreamGroups_);
peerStreamGroupsSeen_ = std::move(other.peerStreamGroupsSeen_);
peerUnidirectionalStreamGroupsSeen_ =
std::move(other.peerUnidirectionalStreamGroupsSeen_);
newGroupedPeerStreams_ = std::move(other.newGroupedPeerStreams_);
blockedStreams_ = std::move(other.blockedStreams_);
stopSendingStreams_ = std::move(other.stopSendingStreams_);
Expand Down Expand Up @@ -408,7 +413,8 @@ class QuicStreamManager {
openUnidirectionalPeerStreams_.clear();
openBidirectionalLocalStreamGroups_.clear();
openUnidirectionalLocalStreamGroups_.clear();
peerStreamGroupsSeen_.clear();
peerUnidirectionalStreamGroupsSeen_.clear();
peerBidirectionalStreamGroupsSeen_.clear();
streams_.clear();
}

Expand Down Expand Up @@ -1060,7 +1066,8 @@ class QuicStreamManager {
}

[[nodiscard]] size_t getNumPeerStreamGroupsSeen() const {
return peerStreamGroupsSeen_.size();
return peerUnidirectionalStreamGroupsSeen_.size() +
peerBidirectionalStreamGroupsSeen_.size();
}

private:
Expand Down Expand Up @@ -1204,7 +1211,8 @@ class QuicStreamManager {
folly::F14FastSet<StreamGroupId> newPeerStreamGroups_;

// Peer group ids seen.
folly::F14FastSet<StreamGroupId> peerStreamGroupsSeen_;
StreamIdSet peerUnidirectionalStreamGroupsSeen_;
StreamIdSet peerBidirectionalStreamGroupsSeen_;

// Map of streams that were blocked
folly::F14FastMap<StreamId, StreamDataBlockedFrame> blockedStreams_;
Expand Down
12 changes: 6 additions & 6 deletions quic/state/test/QuicStreamManagerTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -853,7 +853,7 @@ TEST_P(QuicStreamManagerGroupsTest, TestPeerStreamsWithGroup) {
manager.refreshTransportSettings(conn.transportSettings);

const StreamId peerStreamId = 2;
const StreamGroupId peeGroupId = 0;
const StreamGroupId peeGroupId = 2;
auto stream = manager.getStream(peerStreamId, peeGroupId);
EXPECT_NE(stream, nullptr);
EXPECT_EQ(stream->groupId, peeGroupId);
Expand All @@ -877,7 +877,7 @@ TEST_P(QuicStreamManagerGroupsTest, TestPeerStreamsWithGroupAccounting) {
manager.refreshTransportSettings(conn.transportSettings);

StreamId peerStreamId = 2;
StreamGroupId peeGroupId = 0;
StreamGroupId peeGroupId = 2;
auto stream = manager.getStream(peerStreamId, peeGroupId);
EXPECT_NE(stream, nullptr);
EXPECT_EQ(stream->groupId, peeGroupId);
Expand All @@ -886,7 +886,7 @@ TEST_P(QuicStreamManagerGroupsTest, TestPeerStreamsWithGroupAccounting) {

// Another stream, same group.
peerStreamId = 6;
peeGroupId = 0;
peeGroupId = 2;
stream = manager.getStream(peerStreamId, peeGroupId);
EXPECT_NE(stream, nullptr);
EXPECT_EQ(stream->groupId, peeGroupId);
Expand All @@ -895,7 +895,7 @@ TEST_P(QuicStreamManagerGroupsTest, TestPeerStreamsWithGroupAccounting) {

// New stream, new group.
peerStreamId = 10;
peeGroupId = 4;
peeGroupId = 6;
stream = manager.getStream(peerStreamId, peeGroupId);
EXPECT_NE(stream, nullptr);
EXPECT_EQ(stream->groupId, peeGroupId);
Expand All @@ -904,7 +904,7 @@ TEST_P(QuicStreamManagerGroupsTest, TestPeerStreamsWithGroupAccounting) {

// New stream, previous group.
peerStreamId = 14;
peeGroupId = 0;
peeGroupId = 2;
stream = manager.getStream(peerStreamId, peeGroupId);
EXPECT_NE(stream, nullptr);
EXPECT_EQ(stream->groupId, peeGroupId);
Expand All @@ -913,7 +913,7 @@ TEST_P(QuicStreamManagerGroupsTest, TestPeerStreamsWithGroupAccounting) {

// New stream, current group.
peerStreamId = 18;
peeGroupId = 4;
peeGroupId = 6;
stream = manager.getStream(peerStreamId, peeGroupId);
EXPECT_NE(stream, nullptr);
EXPECT_EQ(stream->groupId, peeGroupId);
Expand Down

0 comments on commit 6c6c95a

Please sign in to comment.