mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-24 04:01:07 +03:00
fix numMigrations increment
Summary: we should only increment numMigrations if the peer is attempting migration from a previously unseen addr Reviewed By: kvtsoy, sharmafb Differential Revision: D55884605 fbshipit-source-id: 9204ed785195a321d7f8f7497151b7cfe5f745f7
This commit is contained in:
committed by
Facebook GitHub Bot
parent
a8543fd9b8
commit
1730ed8a73
@@ -579,7 +579,6 @@ void onConnectionMigration(
|
|||||||
throw QuicTransportException(
|
throw QuicTransportException(
|
||||||
"Too many migrations", TransportErrorCode::INVALID_MIGRATION);
|
"Too many migrations", TransportErrorCode::INVALID_MIGRATION);
|
||||||
}
|
}
|
||||||
++conn.migrationState.numMigrations;
|
|
||||||
|
|
||||||
bool hasPendingPathChallenge = conn.pendingEvents.pathChallenge.has_value();
|
bool hasPendingPathChallenge = conn.pendingEvents.pathChallenge.has_value();
|
||||||
// Clear any pending path challenge frame that is not sent
|
// Clear any pending path challenge frame that is not sent
|
||||||
@@ -591,6 +590,7 @@ void onConnectionMigration(
|
|||||||
previousPeerAddresses.end(),
|
previousPeerAddresses.end(),
|
||||||
newPeerAddress);
|
newPeerAddress);
|
||||||
if (it == previousPeerAddresses.end()) {
|
if (it == previousPeerAddresses.end()) {
|
||||||
|
++conn.migrationState.numMigrations;
|
||||||
// send new path challenge
|
// send new path challenge
|
||||||
conn.pendingEvents.pathChallenge.emplace(folly::Random::secureRand64());
|
conn.pendingEvents.pathChallenge.emplace(folly::Random::secureRand64());
|
||||||
|
|
||||||
|
|||||||
@@ -1849,6 +1849,7 @@ TEST_P(
|
|||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
event->dropReason,
|
event->dropReason,
|
||||||
PacketDropReason(PacketDropReason::PEER_ADDRESS_CHANGE)._to_string());
|
PacketDropReason(PacketDropReason::PEER_ADDRESS_CHANGE)._to_string());
|
||||||
|
EXPECT_EQ(server->getConn().migrationState.numMigrations, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(
|
TEST_P(
|
||||||
@@ -1872,6 +1873,8 @@ TEST_P(
|
|||||||
0 /* cipherOverhead */,
|
0 /* cipherOverhead */,
|
||||||
0 /* largestAcked */));
|
0 /* largestAcked */));
|
||||||
|
|
||||||
|
EXPECT_EQ(server->getConn().migrationState.numMigrations, 0);
|
||||||
|
|
||||||
// Receive second packet first
|
// Receive second packet first
|
||||||
deliverData(std::move(secondPacket));
|
deliverData(std::move(secondPacket));
|
||||||
|
|
||||||
@@ -1884,6 +1887,7 @@ TEST_P(
|
|||||||
|
|
||||||
// No migration for reordered packet
|
// No migration for reordered packet
|
||||||
EXPECT_EQ(server->getConn().peerAddress, peerAddress);
|
EXPECT_EQ(server->getConn().peerAddress, peerAddress);
|
||||||
|
EXPECT_EQ(server->getConn().migrationState.numMigrations, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(QuicServerTransportAllowMigrationTest, MigrateToUnvalidatedPeer) {
|
TEST_P(QuicServerTransportAllowMigrationTest, MigrateToUnvalidatedPeer) {
|
||||||
@@ -1898,6 +1902,7 @@ TEST_P(QuicServerTransportAllowMigrationTest, MigrateToUnvalidatedPeer) {
|
|||||||
0 /* largestAcked */));
|
0 /* largestAcked */));
|
||||||
|
|
||||||
EXPECT_EQ(server->getConn().migrationState.previousPeerAddresses.size(), 0);
|
EXPECT_EQ(server->getConn().migrationState.previousPeerAddresses.size(), 0);
|
||||||
|
EXPECT_EQ(server->getConn().migrationState.numMigrations, 0);
|
||||||
|
|
||||||
auto peerAddress = server->getConn().peerAddress;
|
auto peerAddress = server->getConn().peerAddress;
|
||||||
auto congestionController = server->getConn().congestionController.get();
|
auto congestionController = server->getConn().congestionController.get();
|
||||||
@@ -1912,6 +1917,7 @@ TEST_P(QuicServerTransportAllowMigrationTest, MigrateToUnvalidatedPeer) {
|
|||||||
|
|
||||||
EXPECT_TRUE(server->getConn().pendingEvents.pathChallenge);
|
EXPECT_TRUE(server->getConn().pendingEvents.pathChallenge);
|
||||||
EXPECT_EQ(server->getConn().peerAddress, newPeer);
|
EXPECT_EQ(server->getConn().peerAddress, newPeer);
|
||||||
|
EXPECT_EQ(server->getConn().migrationState.numMigrations, 1);
|
||||||
EXPECT_EQ(server->getConn().migrationState.previousPeerAddresses.size(), 1);
|
EXPECT_EQ(server->getConn().migrationState.previousPeerAddresses.size(), 1);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
server->getConn().migrationState.previousPeerAddresses.back(),
|
server->getConn().migrationState.previousPeerAddresses.back(),
|
||||||
@@ -1962,6 +1968,21 @@ TEST_P(QuicServerTransportAllowMigrationTest, MigrateToUnvalidatedPeer) {
|
|||||||
EXPECT_FALSE(server->getConn().outstandingPathValidation);
|
EXPECT_FALSE(server->getConn().outstandingPathValidation);
|
||||||
EXPECT_FALSE(server->getConn().pendingEvents.schedulePathValidationTimeout);
|
EXPECT_FALSE(server->getConn().pendingEvents.schedulePathValidationTimeout);
|
||||||
EXPECT_FALSE(server->pathValidationTimeout().isTimerCallbackScheduled());
|
EXPECT_FALSE(server->pathValidationTimeout().isTimerCallbackScheduled());
|
||||||
|
|
||||||
|
// receiving data from the original peer address should not increment
|
||||||
|
// numMigrations counter
|
||||||
|
EXPECT_CALL(*quicStats_, onPeerAddressChanged).Times(1);
|
||||||
|
auto nextPacketData = packetToBuf(createStreamPacket(
|
||||||
|
*clientConnectionId,
|
||||||
|
*server->getConn().serverConnectionId,
|
||||||
|
clientNextAppDataPacketNum++,
|
||||||
|
6,
|
||||||
|
*data,
|
||||||
|
0 /* cipherOverhead */,
|
||||||
|
0 /* largestAcked */));
|
||||||
|
|
||||||
|
deliverData(std::move(nextPacketData), false);
|
||||||
|
EXPECT_EQ(server->getConn().migrationState.numMigrations, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(QuicServerTransportAllowMigrationTest, ResetPathRttPathResponse) {
|
TEST_P(QuicServerTransportAllowMigrationTest, ResetPathRttPathResponse) {
|
||||||
@@ -1975,6 +1996,7 @@ TEST_P(QuicServerTransportAllowMigrationTest, ResetPathRttPathResponse) {
|
|||||||
0 /* cipherOverhead */,
|
0 /* cipherOverhead */,
|
||||||
0 /* largestAcked */));
|
0 /* largestAcked */));
|
||||||
|
|
||||||
|
EXPECT_EQ(server->getConn().migrationState.numMigrations, 0);
|
||||||
EXPECT_EQ(server->getConn().migrationState.previousPeerAddresses.size(), 0);
|
EXPECT_EQ(server->getConn().migrationState.previousPeerAddresses.size(), 0);
|
||||||
|
|
||||||
auto peerAddress = server->getConn().peerAddress;
|
auto peerAddress = server->getConn().peerAddress;
|
||||||
@@ -1989,6 +2011,7 @@ TEST_P(QuicServerTransportAllowMigrationTest, ResetPathRttPathResponse) {
|
|||||||
EXPECT_TRUE(server->getConn().pendingEvents.pathChallenge);
|
EXPECT_TRUE(server->getConn().pendingEvents.pathChallenge);
|
||||||
EXPECT_EQ(server->getConn().peerAddress, newPeer);
|
EXPECT_EQ(server->getConn().peerAddress, newPeer);
|
||||||
EXPECT_EQ(server->getConn().migrationState.previousPeerAddresses.size(), 1);
|
EXPECT_EQ(server->getConn().migrationState.previousPeerAddresses.size(), 1);
|
||||||
|
EXPECT_EQ(server->getConn().migrationState.numMigrations, 1);
|
||||||
EXPECT_EQ(
|
EXPECT_EQ(
|
||||||
server->getConn().migrationState.previousPeerAddresses.back(),
|
server->getConn().migrationState.previousPeerAddresses.back(),
|
||||||
peerAddress);
|
peerAddress);
|
||||||
@@ -2190,6 +2213,8 @@ TEST_F(QuicServerTransportTest, TooManyMigrations) {
|
|||||||
EXPECT_CALL(*quicStats_, onPeerAddressChanged).Times(1);
|
EXPECT_CALL(*quicStats_, onPeerAddressChanged).Times(1);
|
||||||
deliverData(packetData->clone(), false, &newPeer);
|
deliverData(packetData->clone(), false, &newPeer);
|
||||||
}
|
}
|
||||||
|
EXPECT_EQ(
|
||||||
|
server->getConn().migrationState.numMigrations, maxNumMigrationsAllowed);
|
||||||
|
|
||||||
folly::SocketAddress newPeer("200.101.102.103", 23456);
|
folly::SocketAddress newPeer("200.101.102.103", 23456);
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user