mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-25 15:43:13 +03:00
Remove open stream sorting.
Summary: The idea of having a sorted deque to do this makes some sense, but it ends up extremely inefficient for workloads that churn through a lot of streams. Mitigate this by instead tracking the open streams with a `FastSet`. For a very small number of streams this will probably be slightly less efficient, but not measurably. Reviewed By: kvtsoy Differential Revision: D18409885 fbshipit-source-id: 2214640682926b4b4525700df85627f6125cabe8
This commit is contained in:
committed by
Facebook Github Bot
parent
61004ba72c
commit
038b9a2d67
@@ -991,10 +991,16 @@ TEST_F(QuicServerStreamFunctionsTest, CreateQuicStreamServerOutOfOrder) {
|
||||
StreamId outOfOrderStream2 = 49;
|
||||
conn.streamManager->createStream(outOfOrderStream1).value();
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 26);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
26);
|
||||
conn.streamManager->createStream(outOfOrderStream2).value();
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 26);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
26);
|
||||
}
|
||||
|
||||
TEST_F(QuicStreamFunctionsTest, CreateQuicStreamClientOutOfOrder) {
|
||||
@@ -1002,19 +1008,25 @@ TEST_F(QuicStreamFunctionsTest, CreateQuicStreamClientOutOfOrder) {
|
||||
StreamId outOfOrderStream2 = 48;
|
||||
conn.streamManager->createStream(outOfOrderStream1);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 25);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
25);
|
||||
conn.streamManager->createStream(outOfOrderStream2).value();
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 25);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
25);
|
||||
}
|
||||
|
||||
TEST_F(QuicServerStreamFunctionsTest, CreateClosedServerStream) {
|
||||
StreamId outOfOrderStream1 = 101;
|
||||
StreamId outOfOrderStream2 = 49;
|
||||
conn.streamManager->createStream(outOfOrderStream1);
|
||||
conn.streamManager->openLocalStreams().erase(std::find(
|
||||
conn.streamManager->openLocalStreams().begin(),
|
||||
conn.streamManager->openLocalStreams().end(),
|
||||
conn.streamManager->openBidirectionalLocalStreams().erase(std::find(
|
||||
conn.streamManager->openBidirectionalLocalStreams().begin(),
|
||||
conn.streamManager->openBidirectionalLocalStreams().end(),
|
||||
outOfOrderStream2));
|
||||
EXPECT_FALSE(conn.streamManager->createStream(outOfOrderStream2));
|
||||
}
|
||||
@@ -1023,9 +1035,9 @@ TEST_F(QuicStreamFunctionsTest, CreateClosedClientStream) {
|
||||
StreamId outOfOrderStream1 = 96;
|
||||
StreamId outOfOrderStream2 = 48;
|
||||
conn.streamManager->createStream(outOfOrderStream1).value();
|
||||
conn.streamManager->openLocalStreams().erase(std::find(
|
||||
conn.streamManager->openLocalStreams().begin(),
|
||||
conn.streamManager->openLocalStreams().end(),
|
||||
conn.streamManager->openBidirectionalLocalStreams().erase(std::find(
|
||||
conn.streamManager->openBidirectionalLocalStreams().begin(),
|
||||
conn.streamManager->openBidirectionalLocalStreams().end(),
|
||||
outOfOrderStream2));
|
||||
EXPECT_FALSE(conn.streamManager->createStream(outOfOrderStream2));
|
||||
}
|
||||
@@ -1569,12 +1581,18 @@ TEST_F(QuicServerStreamFunctionsTest, ServerGetServerQuicStream) {
|
||||
conn.streamManager->createStream(serverStream).value();
|
||||
EXPECT_EQ(conn.streamManager->getStream(serverStream)->id, serverStream);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 3);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
3);
|
||||
|
||||
StreamId serverStream2 = 0x05;
|
||||
EXPECT_EQ(conn.streamManager->getStream(serverStream2)->id, serverStream2);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 3);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
3);
|
||||
|
||||
StreamId serverStream3 = 0x0D;
|
||||
EXPECT_THROW(
|
||||
@@ -1586,14 +1604,20 @@ TEST_F(QuicServerStreamFunctionsTest, ServerGetBothDirections) {
|
||||
conn.streamManager->createStream(serverBiStream).value();
|
||||
EXPECT_EQ(conn.streamManager->getStream(serverBiStream)->id, serverBiStream);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 3);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
3);
|
||||
|
||||
StreamId serverUniStream = 0x0B;
|
||||
conn.streamManager->createStream(serverUniStream).value();
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->getStream(serverUniStream)->id, serverUniStream);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 6);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
6);
|
||||
}
|
||||
|
||||
TEST_F(QuicServerStreamFunctionsTest, ServerGetCloseBothDirections) {
|
||||
@@ -1626,12 +1650,18 @@ TEST_F(QuicServerStreamFunctionsTest, ServerGetServerUnidirectionalQuicStream) {
|
||||
conn.streamManager->createStream(serverStream).value();
|
||||
EXPECT_EQ(conn.streamManager->getStream(serverStream)->id, serverStream);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 4);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
4);
|
||||
|
||||
StreamId serverStream2 = 0x0B;
|
||||
EXPECT_EQ(conn.streamManager->getStream(serverStream2)->id, serverStream2);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 4);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
4);
|
||||
|
||||
StreamId serverStream3 = 0x1F;
|
||||
EXPECT_THROW(
|
||||
@@ -1656,12 +1686,18 @@ TEST_F(QuicStreamFunctionsTest, ClientGetClientQuicStream) {
|
||||
|
||||
EXPECT_EQ(conn.streamManager->getStream(clientStream)->id, clientStream);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 1);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 4);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
4);
|
||||
|
||||
StreamId clientStream2 = 0x08;
|
||||
EXPECT_EQ(conn.streamManager->getStream(clientStream2)->id, clientStream2);
|
||||
EXPECT_EQ(conn.streamManager->streamCount(), 2);
|
||||
EXPECT_EQ(conn.streamManager->openLocalStreams().size(), 4);
|
||||
EXPECT_EQ(
|
||||
conn.streamManager->openUnidirectionalLocalStreams().size() +
|
||||
conn.streamManager->openBidirectionalLocalStreams().size(),
|
||||
4);
|
||||
|
||||
StreamId clientStream3 = 0x10;
|
||||
EXPECT_THROW(
|
||||
|
||||
Reference in New Issue
Block a user