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);
|
conn_->congestionController->setBandwidthUtilizationFactor(targetUtilization);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QuicTransportBase::checkCustomRetransmissionProfilesEnabled() const {
|
||||||
|
return quic::checkCustomRetransmissionProfilesEnabled(*conn_);
|
||||||
|
}
|
||||||
|
|
||||||
folly::Expected<folly::Unit, LocalErrorCode>
|
folly::Expected<folly::Unit, LocalErrorCode>
|
||||||
QuicTransportBase::setStreamGroupRetransmissionPolicy(
|
QuicTransportBase::setStreamGroupRetransmissionPolicy(
|
||||||
StreamGroupId /* groupId */,
|
StreamGroupId /* groupId */,
|
||||||
QuicStreamGroupRetransmissionPolicy /* policy */) noexcept {
|
QuicStreamGroupRetransmissionPolicy /* policy */) noexcept {
|
||||||
|
if (!checkCustomRetransmissionProfilesEnabled()) {
|
||||||
|
return folly::makeUnexpected(LocalErrorCode::INVALID_OPERATION);
|
||||||
|
}
|
||||||
return folly::unit;
|
return folly::unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -654,6 +654,9 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
|
|||||||
|
|
||||||
void appendCmsgs(const folly::SocketOptionMap& options);
|
void appendCmsgs(const folly::SocketOptionMap& options);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets stream group retransmission policy.
|
||||||
|
*/
|
||||||
folly::Expected<folly::Unit, LocalErrorCode>
|
folly::Expected<folly::Unit, LocalErrorCode>
|
||||||
setStreamGroupRetransmissionPolicy(
|
setStreamGroupRetransmissionPolicy(
|
||||||
StreamGroupId groupId,
|
StreamGroupId groupId,
|
||||||
@@ -959,6 +962,13 @@ class QuicTransportBase : public QuicSocket, QuicStreamPrioritiesObserver {
|
|||||||
* Helper to log new stream event to observer.
|
* Helper to log new stream event to observer.
|
||||||
*/
|
*/
|
||||||
void logStreamOpenEvent(StreamId streamId);
|
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);
|
std::ostream& operator<<(std::ostream& os, const QuicTransportBase& qt);
|
||||||
|
@@ -4430,5 +4430,33 @@ TEST_P(QuicTransportImplTestWithGroups, onNewStreamsAndGroupsCallbacks) {
|
|||||||
transport.reset();
|
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 test
|
||||||
} // namespace quic
|
} // namespace quic
|
||||||
|
@@ -432,4 +432,9 @@ uint64_t updateLargestReceivedPacketNum(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool checkCustomRetransmissionProfilesEnabled(
|
||||||
|
const QuicConnectionStateBase& conn) {
|
||||||
|
return conn.transportSettings.advertisedMaxStreamGroups > 0;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace quic
|
} // namespace quic
|
||||||
|
@@ -110,4 +110,7 @@ std::pair<folly::Optional<TimePoint>, PacketNumberSpace> earliestTimeAndSpace(
|
|||||||
|
|
||||||
uint64_t maximumConnectionIdsToIssue(const QuicConnectionStateBase& conn);
|
uint64_t maximumConnectionIdsToIssue(const QuicConnectionStateBase& conn);
|
||||||
|
|
||||||
|
bool checkCustomRetransmissionProfilesEnabled(
|
||||||
|
const QuicConnectionStateBase& conn);
|
||||||
|
|
||||||
} // namespace quic
|
} // namespace quic
|
||||||
|
Reference in New Issue
Block a user