mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-08-08 09:42:06 +03:00
jk gating for paused priority
Summary: As lnicco raised, this feature can raise possible "overload" concerns so for safety, add a JK knob to easily disable it if needed. Reviewed By: mjoras, lnicco Differential Revision: D70417454 fbshipit-source-id: b79fe59d09f8c547e55d7703ac1438cbded011cb
This commit is contained in:
committed by
Facebook GitHub Bot
parent
dc02bfd4b3
commit
7bd8a75b6f
@@ -2635,7 +2635,7 @@ TEST_F(QuicPacketSchedulerTest, RstStreamSchedulerReliableReset) {
|
|||||||
EXPECT_FALSE(conn.pendingEvents.resets.contains(stream->id));
|
EXPECT_FALSE(conn.pendingEvents.resets.contains(stream->id));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicPacketSchedulerTest, PausedPriorityInitial) {
|
TEST_F(QuicPacketSchedulerTest, PausedPriorityEnabled) {
|
||||||
static const auto kSequentialPriority = Priority(3, false);
|
static const auto kSequentialPriority = Priority(3, false);
|
||||||
static const auto kPausedPriority = Priority(0, false, 0, true /* paused */);
|
static const auto kPausedPriority = Priority(0, false, 0, true /* paused */);
|
||||||
|
|
||||||
@@ -2669,6 +2669,26 @@ TEST_F(QuicPacketSchedulerTest, PausedPriorityInitial) {
|
|||||||
ASSERT_FALSE(conn.streamManager->hasWritable());
|
ASSERT_FALSE(conn.streamManager->hasWritable());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(QuicPacketSchedulerTest, PausedPriorityDisabled) {
|
||||||
|
static const auto kSequentialPriority = Priority(3, false);
|
||||||
|
static const auto kPausedPriority = Priority(0, false, 0, true /* paused */);
|
||||||
|
|
||||||
|
auto connPtr = createConn(10, 100000, 100000);
|
||||||
|
auto& conn = *connPtr;
|
||||||
|
conn.transportSettings.disablePausedPriority = true;
|
||||||
|
StreamFrameScheduler scheduler(conn);
|
||||||
|
|
||||||
|
auto pausedStreamId = createStream(conn, kPausedPriority);
|
||||||
|
auto regularStreamId = createStream(conn, kSequentialPriority);
|
||||||
|
|
||||||
|
auto pausedFrame = writeDataToStream(conn, pausedStreamId, "paused_data");
|
||||||
|
auto regularFrame = writeDataToStream(conn, regularStreamId, "regular_data");
|
||||||
|
|
||||||
|
auto builder = setupMockPacketBuilder();
|
||||||
|
scheduler.writeStreams(*builder);
|
||||||
|
verifyStreamFrames(*builder, {pausedFrame, regularFrame});
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(QuicPacketSchedulerTest, FixedShortHeaderPadding) {
|
TEST_F(QuicPacketSchedulerTest, FixedShortHeaderPadding) {
|
||||||
QuicServerConnectionState conn(
|
QuicServerConnectionState conn(
|
||||||
FizzServerQuicHandshakeContext::Builder().build());
|
FizzServerQuicHandshakeContext::Builder().build());
|
||||||
|
@@ -213,13 +213,11 @@ struct PriorityQueue {
|
|||||||
void updateIfExist(StreamId id, Priority priority) {
|
void updateIfExist(StreamId id, Priority priority) {
|
||||||
auto iter = writableStreamsToLevel_.find(id);
|
auto iter = writableStreamsToLevel_.find(id);
|
||||||
if (iter != writableStreamsToLevel_.end()) {
|
if (iter != writableStreamsToLevel_.end()) {
|
||||||
CHECK(!priority.paused);
|
|
||||||
updateExistingStreamPriority(iter, priority);
|
updateExistingStreamPriority(iter, priority);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void insertOrUpdate(StreamId id, Priority pri) {
|
void insertOrUpdate(StreamId id, Priority pri) {
|
||||||
CHECK(!pri.paused);
|
|
||||||
auto it = writableStreamsToLevel_.find(id);
|
auto it = writableStreamsToLevel_.find(id);
|
||||||
auto index = priority2index(pri);
|
auto index = priority2index(pri);
|
||||||
if (it != writableStreamsToLevel_.end()) {
|
if (it != writableStreamsToLevel_.end()) {
|
||||||
|
@@ -646,7 +646,7 @@ void QuicStreamManager::updateWritableStreams(QuicStreamState& stream) {
|
|||||||
removeWritable(stream);
|
removeWritable(stream);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (stream.priority.paused) {
|
if (stream.priority.paused && !transportSettings_->disablePausedPriority) {
|
||||||
removeWritable(stream);
|
removeWritable(stream);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -458,6 +458,10 @@ struct TransportSettings {
|
|||||||
// Ceiling of packets to receive from signaled socket per evb loop on the
|
// Ceiling of packets to receive from signaled socket per evb loop on the
|
||||||
// server side.
|
// server side.
|
||||||
uint16_t maxServerRecvPacketsPerLoop{1};
|
uint16_t maxServerRecvPacketsPerLoop{1};
|
||||||
|
|
||||||
|
// Support "paused" requests which buffer on the server without streaming back
|
||||||
|
// to the client.
|
||||||
|
bool disablePausedPriority{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace quic
|
} // namespace quic
|
||||||
|
Reference in New Issue
Block a user