1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-08-08 09:42:06 +03:00

Add enableCustomRetransmissionPolicies()

Summary: Add enableCustomRetransmissionPolicies()

Reviewed By: mjoras

Differential Revision: D39658775

fbshipit-source-id: 1413e6a3112e406222df4ce54e6036f518432a82
This commit is contained in:
Konstantin Tsoy
2023-02-23 21:31:24 -08:00
committed by Facebook GitHub Bot
parent 377260f704
commit b4cb994fd8
5 changed files with 53 additions and 0 deletions

View File

@@ -3805,10 +3805,17 @@ void QuicTransportBase::onStreamPrioritiesChange() {
conn_->congestionController->setBandwidthUtilizationFactor(targetUtilization);
}
bool QuicTransportBase::checkCustomRetransmissionProfilesEnabled() const {
return quic::checkCustomRetransmissionProfilesEnabled(*conn_);
}
folly::Expected<folly::Unit, LocalErrorCode>
QuicTransportBase::setStreamGroupRetransmissionPolicy(
StreamGroupId /* groupId */,
QuicStreamGroupRetransmissionPolicy /* policy */) noexcept {
if (!checkCustomRetransmissionProfilesEnabled()) {
return folly::makeUnexpected(LocalErrorCode::INVALID_OPERATION);
}
return folly::unit;
}

View File

@@ -654,6 +654,9 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
void appendCmsgs(const folly::SocketOptionMap& options);
/**
* Sets stream group retransmission policy.
*/
folly::Expected<folly::Unit, LocalErrorCode>
setStreamGroupRetransmissionPolicy(
StreamGroupId groupId,
@@ -959,6 +962,13 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
* Helper to log new stream event to observer.
*/
void logStreamOpenEvent(StreamId streamId);
/**
* Helper to check if using custom retransmission profiles is feasible.
* Custom retransmission profiles are only applicable when stream groups are
* enabled, i.e. advertisedMaxStreamGroups in transport settings is > 0.
*/
[[nodiscard]] bool checkCustomRetransmissionProfilesEnabled() const;
};
std::ostream& operator<<(std::ostream& os, const QuicTransportBase& qt);

View File

@@ -4430,5 +4430,33 @@ TEST_P(QuicTransportImplTestWithGroups, onNewStreamsAndGroupsCallbacks) {
transport.reset();
}
TEST_P(
QuicTransportImplTestWithGroups,
TestSetStreamGroupRetransmissionPolicyAllowed) {
auto transportSettings = transport->getTransportSettings();
transportSettings.advertisedMaxStreamGroups = 16;
transport->setTransportSettings(transportSettings);
transport->getConnectionState().streamManager->refreshTransportSettings(
transportSettings);
const StreamGroupId groupId = 0x00;
const QuicStreamGroupRetransmissionPolicy policy;
// Test policy set allowed
auto res = transport->setStreamGroupRetransmissionPolicy(groupId, policy);
EXPECT_TRUE(res.hasValue());
// Test policy set not allowed.
transportSettings.advertisedMaxStreamGroups = 0;
transport->setTransportSettings(transportSettings);
transport->getConnectionState().streamManager->refreshTransportSettings(
transportSettings);
res = transport->setStreamGroupRetransmissionPolicy(groupId, policy);
EXPECT_TRUE(res.hasError());
EXPECT_EQ(res.error(), LocalErrorCode::INVALID_OPERATION);
transport.reset();
}
} // namespace test
} // namespace quic

View File

@@ -432,4 +432,9 @@ uint64_t updateLargestReceivedPacketNum(
}
}
bool checkCustomRetransmissionProfilesEnabled(
const QuicConnectionStateBase& conn) {
return conn.transportSettings.advertisedMaxStreamGroups > 0;
}
} // namespace quic

View File

@@ -110,4 +110,7 @@ std::pair<folly::Optional<TimePoint>, PacketNumberSpace> earliestTimeAndSpace(
uint64_t maximumConnectionIdsToIssue(const QuicConnectionStateBase& conn);
bool checkCustomRetransmissionProfilesEnabled(
const QuicConnectionStateBase& conn);
} // namespace quic