1
0
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:
Paul Farcasanu
2025-03-05 12:57:56 -08:00
committed by Facebook GitHub Bot
parent dc02bfd4b3
commit 7bd8a75b6f
4 changed files with 26 additions and 4 deletions

View File

@@ -2635,7 +2635,7 @@ TEST_F(QuicPacketSchedulerTest, RstStreamSchedulerReliableReset) {
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 kPausedPriority = Priority(0, false, 0, true /* paused */);
@@ -2669,6 +2669,26 @@ TEST_F(QuicPacketSchedulerTest, PausedPriorityInitial) {
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) {
QuicServerConnectionState conn(
FizzServerQuicHandshakeContext::Builder().build());

View File

@@ -213,13 +213,11 @@ struct PriorityQueue {
void updateIfExist(StreamId id, Priority priority) {
auto iter = writableStreamsToLevel_.find(id);
if (iter != writableStreamsToLevel_.end()) {
CHECK(!priority.paused);
updateExistingStreamPriority(iter, priority);
}
}
void insertOrUpdate(StreamId id, Priority pri) {
CHECK(!pri.paused);
auto it = writableStreamsToLevel_.find(id);
auto index = priority2index(pri);
if (it != writableStreamsToLevel_.end()) {

View File

@@ -646,7 +646,7 @@ void QuicStreamManager::updateWritableStreams(QuicStreamState& stream) {
removeWritable(stream);
return;
}
if (stream.priority.paused) {
if (stream.priority.paused && !transportSettings_->disablePausedPriority) {
removeWritable(stream);
return;
}

View File

@@ -458,6 +458,10 @@ struct TransportSettings {
// Ceiling of packets to receive from signaled socket per evb loop on the
// server side.
uint16_t maxServerRecvPacketsPerLoop{1};
// Support "paused" requests which buffer on the server without streaming back
// to the client.
bool disablePausedPriority{false};
};
} // namespace quic