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:
committed by
Facebook GitHub Bot
parent
377260f704
commit
b4cb994fd8
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -432,4 +432,9 @@ uint64_t updateLargestReceivedPacketNum(
|
||||
}
|
||||
}
|
||||
|
||||
bool checkCustomRetransmissionProfilesEnabled(
|
||||
const QuicConnectionStateBase& conn) {
|
||||
return conn.transportSettings.advertisedMaxStreamGroups > 0;
|
||||
}
|
||||
|
||||
} // namespace quic
|
||||
|
@@ -110,4 +110,7 @@ std::pair<folly::Optional<TimePoint>, PacketNumberSpace> earliestTimeAndSpace(
|
||||
|
||||
uint64_t maximumConnectionIdsToIssue(const QuicConnectionStateBase& conn);
|
||||
|
||||
bool checkCustomRetransmissionProfilesEnabled(
|
||||
const QuicConnectionStateBase& conn);
|
||||
|
||||
} // namespace quic
|
||||
|
Reference in New Issue
Block a user