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));
|
||||
}
|
||||
|
||||
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());
|
||||
|
@@ -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()) {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user