Automated g4 rollback of changelist 251711909. *** Reason for rollback *** For a clean rollback of cl/250877268 which cause 20181010 QUIC b3m prober failure. *** Original change description *** gfe-relnote: Deprecate gfe2_reloadable_flag_quic_enable_version_46 . *** PiperOrigin-RevId: 251871707 Change-Id: I2e3ef451bda2c2b3f3dc5353d6eb0b5f50943fe1
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc index 517b892..188707b 100644 --- a/quic/core/quic_dispatcher_test.cc +++ b/quic/core/quic_dispatcher_test.cc
@@ -877,6 +877,7 @@ static_assert(QUIC_ARRAYSIZE(kSupportedTransportVersions) == 5u, "Supported versions out of sync"); SetQuicReloadableFlag(quic_disable_version_39, false); + SetQuicReloadableFlag(quic_enable_version_46, true); SetQuicReloadableFlag(quic_enable_version_47, true); SetQuicReloadableFlag(quic_enable_version_99, true); QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1); @@ -961,6 +962,39 @@ SerializeCHLO(), CONNECTION_ID_PRESENT, PACKET_4BYTE_PACKET_NUMBER, 1); + // Turn off version 46. + SetQuicReloadableFlag(quic_enable_version_46, false); + connection_id = TestConnectionId(++conn_id); + EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address, + QuicStringPiece("hq"), _)) + .Times(0); + ProcessPacket(client_address, connection_id, true, + ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46), + SerializeCHLO(), CONNECTION_ID_PRESENT, + PACKET_4BYTE_PACKET_NUMBER, 1); + + // Turn on version 46. + SetQuicReloadableFlag(quic_enable_version_46, true); + connection_id = TestConnectionId(++conn_id); + EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address, + QuicStringPiece("hq"), _)) + .WillOnce(testing::Return(CreateSession( + dispatcher_.get(), config_, connection_id, client_address, + &mock_helper_, &mock_alarm_factory_, &crypto_config_, + QuicDispatcherPeer::GetCache(dispatcher_.get()), &session1_))); + EXPECT_CALL(*reinterpret_cast<MockQuicConnection*>(session1_->connection()), + ProcessUdpPacket(_, _, _)) + .WillOnce(WithArg<2>( + Invoke([this, connection_id](const QuicEncryptedPacket& packet) { + ValidatePacket(connection_id, packet); + }))); + EXPECT_CALL(*dispatcher_, + ShouldCreateOrBufferPacketForConnection(connection_id, _)); + ProcessPacket(client_address, connection_id, true, + ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46), + SerializeCHLO(), CONNECTION_ID_PRESENT, + PACKET_4BYTE_PACKET_NUMBER, 1); + // Turn off version 39. SetQuicReloadableFlag(quic_disable_version_39, true); connection_id = TestConnectionId(++conn_id);
diff --git a/quic/core/quic_version_manager.cc b/quic/core/quic_version_manager.cc index 045e38c..cde3664 100644 --- a/quic/core/quic_version_manager.cc +++ b/quic/core/quic_version_manager.cc
@@ -16,6 +16,7 @@ ParsedQuicVersionVector supported_versions) : enable_version_99_(GetQuicReloadableFlag(quic_enable_version_99)), enable_version_47_(GetQuicReloadableFlag(quic_enable_version_47)), + enable_version_46_(GetQuicReloadableFlag(quic_enable_version_46)), disable_version_39_(GetQuicReloadableFlag(quic_disable_version_39)), enable_tls_(GetQuicFlag(FLAGS_quic_supports_tls_handshake)), allowed_supported_versions_(std::move(supported_versions)) { @@ -38,10 +39,12 @@ void QuicVersionManager::MaybeRefilterSupportedVersions() { if (enable_version_99_ != GetQuicReloadableFlag(quic_enable_version_99) || enable_version_47_ != GetQuicReloadableFlag(quic_enable_version_47) || + enable_version_46_ != GetQuicReloadableFlag(quic_enable_version_46) || disable_version_39_ != GetQuicReloadableFlag(quic_disable_version_39) || enable_tls_ != GetQuicFlag(FLAGS_quic_supports_tls_handshake)) { enable_version_99_ = GetQuicReloadableFlag(quic_enable_version_99); enable_version_47_ = GetQuicReloadableFlag(quic_enable_version_47); + enable_version_46_ = GetQuicReloadableFlag(quic_enable_version_46); disable_version_39_ = GetQuicReloadableFlag(quic_disable_version_39); enable_tls_ = GetQuicFlag(FLAGS_quic_supports_tls_handshake); RefilterSupportedVersions();
diff --git a/quic/core/quic_version_manager.h b/quic/core/quic_version_manager.h index 71a285a..a865be6 100644 --- a/quic/core/quic_version_manager.h +++ b/quic/core/quic_version_manager.h
@@ -42,6 +42,8 @@ bool enable_version_99_; // quic_enable_version_47 flag bool enable_version_47_; + // quic_enable_version_46 flag + bool enable_version_46_; // quic_disable_version_39 flag bool disable_version_39_; // quic_supports_tls_handshake flag
diff --git a/quic/core/quic_version_manager_test.cc b/quic/core/quic_version_manager_test.cc index 4e4b3f4..de5af3b 100644 --- a/quic/core/quic_version_manager_test.cc +++ b/quic/core/quic_version_manager_test.cc
@@ -20,16 +20,21 @@ "Supported versions out of sync"); SetQuicReloadableFlag(quic_enable_version_99, false); SetQuicReloadableFlag(quic_enable_version_47, false); + SetQuicReloadableFlag(quic_enable_version_46, false); SetQuicReloadableFlag(quic_disable_version_39, true); QuicVersionManager manager(AllSupportedVersions()); EXPECT_EQ(FilterSupportedTransportVersions(AllSupportedTransportVersions()), manager.GetSupportedTransportVersions()); - EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_46, QUIC_VERSION_43}), + EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_43}), manager.GetSupportedTransportVersions()); SetQuicReloadableFlag(quic_disable_version_39, false); + EXPECT_EQ(QuicTransportVersionVector({QUIC_VERSION_43, QUIC_VERSION_39}), + manager.GetSupportedTransportVersions()); + + SetQuicReloadableFlag(quic_enable_version_46, true); EXPECT_EQ(QuicTransportVersionVector( {QUIC_VERSION_46, QUIC_VERSION_43, QUIC_VERSION_39}), manager.GetSupportedTransportVersions());
diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc index 960a046..d540def 100644 --- a/quic/core/quic_versions.cc +++ b/quic/core/quic_versions.cc
@@ -228,11 +228,17 @@ } if (version.transport_version == QUIC_VERSION_99) { if (GetQuicReloadableFlag(quic_enable_version_99) && - GetQuicReloadableFlag(quic_enable_version_47)) { + GetQuicReloadableFlag(quic_enable_version_47) && + GetQuicReloadableFlag(quic_enable_version_46)) { filtered_versions.push_back(version); } } else if (version.transport_version == QUIC_VERSION_47) { - if (GetQuicReloadableFlag(quic_enable_version_47)) { + if (GetQuicReloadableFlag(quic_enable_version_47) && + GetQuicReloadableFlag(quic_enable_version_46)) { + filtered_versions.push_back(version); + } + } else if (version.transport_version == QUIC_VERSION_46) { + if (GetQuicReloadableFlag(quic_enable_version_46)) { filtered_versions.push_back(version); } } else if (version.transport_version == QUIC_VERSION_39) { @@ -439,6 +445,9 @@ if (parsed_version.transport_version >= QUIC_VERSION_47) { SetQuicReloadableFlag(quic_enable_version_47, true); } + if (parsed_version.transport_version >= QUIC_VERSION_46) { + SetQuicReloadableFlag(quic_enable_version_46, true); + } } #undef RETURN_STRING_LITERAL // undef for jumbo builds
diff --git a/quic/core/quic_versions_test.cc b/quic/core/quic_versions_test.cc index 0dbc72b..0b719d5 100644 --- a/quic/core/quic_versions_test.cc +++ b/quic/core/quic_versions_test.cc
@@ -268,6 +268,7 @@ TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsAllVersions) { QuicTransportVersionVector all_versions = AllSupportedTransportVersions(); SetQuicReloadableFlag(quic_disable_version_39, false); + SetQuicReloadableFlag(quic_enable_version_46, true); SetQuicReloadableFlag(quic_enable_version_47, true); SetQuicReloadableFlag(quic_enable_version_99, true); ParsedQuicVersionVector parsed_versions; @@ -290,6 +291,7 @@ TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo99) { QuicTransportVersionVector all_versions = AllSupportedTransportVersions(); SetQuicReloadableFlag(quic_disable_version_39, false); + SetQuicReloadableFlag(quic_enable_version_46, true); SetQuicReloadableFlag(quic_enable_version_47, true); SetQuicReloadableFlag(quic_enable_version_99, false); ParsedQuicVersionVector parsed_versions; @@ -311,6 +313,7 @@ TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo47) { QuicTransportVersionVector all_versions = AllSupportedTransportVersions(); SetQuicReloadableFlag(quic_disable_version_39, false); + SetQuicReloadableFlag(quic_enable_version_46, true); SetQuicReloadableFlag(quic_enable_version_47, false); SetQuicReloadableFlag(quic_enable_version_99, false); ParsedQuicVersionVector parsed_versions; @@ -329,17 +332,39 @@ ASSERT_EQ(expected_parsed_versions, FilterSupportedVersions(parsed_versions)); } -TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo39) { +TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo46) { QuicTransportVersionVector all_versions = AllSupportedTransportVersions(); - SetQuicReloadableFlag(quic_disable_version_39, true); + SetQuicReloadableFlag(quic_disable_version_39, false); + SetQuicReloadableFlag(quic_enable_version_46, false); SetQuicReloadableFlag(quic_enable_version_47, false); SetQuicReloadableFlag(quic_enable_version_99, false); ParsedQuicVersionVector parsed_versions; for (QuicTransportVersion version : all_versions) { parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version)); } - QuicTransportVersionVector expected_versions = {QUIC_VERSION_46, - QUIC_VERSION_43}; + QuicTransportVersionVector expected_versions = {QUIC_VERSION_43, + QUIC_VERSION_39}; + ParsedQuicVersionVector expected_parsed_versions; + for (QuicTransportVersion version : expected_versions) { + expected_parsed_versions.push_back( + ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version)); + } + + ASSERT_EQ(expected_versions, FilterSupportedTransportVersions(all_versions)); + ASSERT_EQ(expected_parsed_versions, FilterSupportedVersions(parsed_versions)); +} + +TEST_F(QuicVersionsTest, FilterSupportedTransportVersionsNo39) { + QuicTransportVersionVector all_versions = AllSupportedTransportVersions(); + SetQuicReloadableFlag(quic_disable_version_39, true); + SetQuicReloadableFlag(quic_enable_version_46, false); + SetQuicReloadableFlag(quic_enable_version_47, false); + SetQuicReloadableFlag(quic_enable_version_99, false); + ParsedQuicVersionVector parsed_versions; + for (QuicTransportVersion version : all_versions) { + parsed_versions.push_back(ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, version)); + } + QuicTransportVersionVector expected_versions = {QUIC_VERSION_43}; ParsedQuicVersionVector expected_parsed_versions; for (QuicTransportVersion version : expected_versions) { expected_parsed_versions.push_back( @@ -446,6 +471,7 @@ ParsedQuicVersion(PROTOCOL_TLS1_3, QUIC_VERSION_99); SetQuicFlag(FLAGS_quic_supports_tls_handshake, false); SetQuicReloadableFlag(quic_disable_version_39, false); + SetQuicReloadableFlag(quic_enable_version_46, true); SetQuicReloadableFlag(quic_enable_version_47, false); SetQuicReloadableFlag(quic_enable_version_99, false);
diff --git a/quic/quartc/quartc_endpoint_test.cc b/quic/quartc/quartc_endpoint_test.cc index 6b56b1a..5f8c25d 100644 --- a/quic/quartc/quartc_endpoint_test.cc +++ b/quic/quartc/quartc_endpoint_test.cc
@@ -80,6 +80,11 @@ // attempts to connect using a newer version. TEST_F(QuartcEndpointTest, QUIC_TEST_DISABLED_IN_CHROME(ServerNegotiatesForOldVersion)) { + // Note: for this test, we need support for two versions. Which two shouldn't + // matter, but they must be enabled so that the version manager doesn't filter + // them out. + SetQuicReloadableFlag(quic_enable_version_46, true); + // Reset the client endpoint to prefer version 46 but also be capable of // speaking version 43. ParsedQuicVersionVector client_versions; @@ -121,6 +126,11 @@ // QUIC versions. TEST_F(QuartcEndpointTest, QUIC_TEST_DISABLED_IN_CHROME(ServerAcceptsOldVersion)) { + // Note: for this test, we need support for two versions. Which two shouldn't + // matter, but they must be enabled so that the version manager doesn't filter + // them out. + SetQuicReloadableFlag(quic_enable_version_46, true); + // Reset the client endpoint to only speak version 43. ParsedQuicVersionVector client_versions; client_versions.push_back({PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43}); @@ -162,6 +172,11 @@ // completely disjoint sets of versions. TEST_F(QuartcEndpointTest, QUIC_TEST_DISABLED_IN_CHROME(VersionNegotiationWithDisjointVersions)) { + // Note: for this test, we need support for two versions. Which two shouldn't + // matter, but they must be enabled so that the version manager doesn't filter + // them out. + SetQuicReloadableFlag(quic_enable_version_46, true); + // Reset the client endpoint to only speak version 43. ParsedQuicVersionVector client_versions; client_versions.push_back({PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43}); @@ -204,6 +219,11 @@ // version negotiation fails. SetQuicReloadableFlag(quic_no_client_conn_ver_negotiation, true); + // Note: for this test, we need support for two versions. Which two shouldn't + // matter, but they must be enabled so that the version manager doesn't filter + // them out. + SetQuicReloadableFlag(quic_enable_version_46, true); + // Reset the client endpoint to prefer version 46 but also be capable of // speaking version 43. ParsedQuicVersionVector client_versions;
diff --git a/quic/quartc/quartc_factory.cc b/quic/quartc/quartc_factory.cc index 4e86fed..b75244c 100644 --- a/quic/quartc/quartc_factory.cc +++ b/quic/quartc/quartc_factory.cc
@@ -62,6 +62,9 @@ // Fix b/110259444. SetQuicReloadableFlag(quic_fix_spurious_ack_alarm, true); + // Enable version 46 to enable SendMessage API and 'quic bit' per draft 17. + SetQuicReloadableFlag(quic_enable_version_46, true); + // Enable version 47 to enable variable-length connection ids. SetQuicReloadableFlag(quic_enable_version_47, true); @@ -96,6 +99,12 @@ // settings doesn't seem preferable. ConfigureGlobalQuicSettings(); + // In exoblaze this may return false. DCHECK to avoid problems caused by + // incorrect flags configuration. + DCHECK(GetQuicReloadableFlag(quic_enable_version_46)) + << "Your build does not support quic reloadable flags and shouldn't " + "place Quartc calls"; + QuicTagVector copt; copt.push_back(kNSTP);