summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDianna Hohensee <dianna.hohensee@10gen.com>2018-01-10 17:37:50 -0500
committerDianna Hohensee <dianna.hohensee@10gen.com>2018-01-12 08:58:34 -0500
commit6e57c0d022c15828ab8c16a1229b355e30e734b6 (patch)
treee4e6cd7ba83eaf272b77f4c867b7fda397bccb84 /src
parent11225541cbbaed58e27ff5254c145dd834a86190 (diff)
downloadmongo-6e57c0d022c15828ab8c16a1229b355e30e734b6.tar.gz
SERVER-32519 clean up WireVersion enum uses in the code to use LATEST_WIRE_VERSION
Diffstat (limited to 'src')
-rw-r--r--src/mongo/client/scoped_db_conn_test.cpp2
-rw-r--r--src/mongo/db/commands/feature_compatibility_version.cpp9
-rw-r--r--src/mongo/rpc/protocol_test.cpp166
-rw-r--r--src/mongo/s/catalog/sharding_catalog_add_shard_test.cpp54
-rw-r--r--src/mongo/s/catalog/sharding_catalog_manager_shard_operations.cpp29
-rw-r--r--src/mongo/s/sharding_mongod_test_fixture.cpp5
6 files changed, 166 insertions, 99 deletions
diff --git a/src/mongo/client/scoped_db_conn_test.cpp b/src/mongo/client/scoped_db_conn_test.cpp
index c117b73a0c7..13a9bb0cf7f 100644
--- a/src/mongo/client/scoped_db_conn_test.cpp
+++ b/src/mongo/client/scoped_db_conn_test.cpp
@@ -132,7 +132,7 @@ private:
// We need to handle the isMaster received during connection.
if (request.getCommandName() == "isMaster") {
- commandResponse.append("maxWireVersion", WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ commandResponse.append("maxWireVersion", WireVersion::LATEST_WIRE_VERSION);
commandResponse.append("minWireVersion", WireVersion::RELEASE_2_4_AND_BEFORE);
}
diff --git a/src/mongo/db/commands/feature_compatibility_version.cpp b/src/mongo/db/commands/feature_compatibility_version.cpp
index 4e4867ed49d..589620d1acb 100644
--- a/src/mongo/db/commands/feature_compatibility_version.cpp
+++ b/src/mongo/db/commands/feature_compatibility_version.cpp
@@ -409,13 +409,8 @@ void FeatureCompatibilityVersion::updateMinWireVersion() {
spec.outgoing.minWireVersion = LATEST_WIRE_VERSION;
return;
case ServerGlobalParams::FeatureCompatibility::Version::kFullyDowngradedTo34:
- // It would be preferable to set 'incomingInternalClient.minWireVersion' and
- // 'outgoing.minWireVersion' to LATEST_WIRE_VERSION - 1, but this is not possible due to
- // a bug in 3.4, where if the receiving node says it supports wire version range
- // [COMMANDS_ACCEPT_WRITE_CONCERN, SUPPORTS_OP_MSG], the initiating node will think it
- // only supports OP_QUERY.
- spec.incomingInternalClient.minWireVersion = RELEASE_2_4_AND_BEFORE;
- spec.outgoing.minWireVersion = RELEASE_2_4_AND_BEFORE;
+ spec.incomingInternalClient.minWireVersion = LATEST_WIRE_VERSION - 1;
+ spec.outgoing.minWireVersion = LATEST_WIRE_VERSION - 1;
return;
case ServerGlobalParams::FeatureCompatibility::Version::kUnsetDefault34Behavior:
// getVersion() does not return this value.
diff --git a/src/mongo/rpc/protocol_test.cpp b/src/mongo/rpc/protocol_test.cpp
index 2c760cdc8e8..f3f8ba51f97 100644
--- a/src/mongo/rpc/protocol_test.cpp
+++ b/src/mongo/rpc/protocol_test.cpp
@@ -127,56 +127,148 @@ TEST(Protocol, parseProtocolSetFromIsMasterReply) {
} while (0);
TEST(Protocol, validateWireVersion) {
- // Base Test
+ /*
+ * Test communication with a MongoD latest binary server with downgraded FCV.
+ */
+
+ // MongoD 'latest' client -> MongoD 'latest' server
+ VALIDATE_WIRE_VERSION(ASSERT_OK,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION);
+
+ // MongoD 'latest' client -> MongoD downgraded 'last-stable' server
VALIDATE_WIRE_VERSION(ASSERT_OK,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 2,
+ WireVersion::LATEST_WIRE_VERSION - 1);
- // Allowed during upgrade
- // MongoD 3.4 client -> MongoD 3.4 server
+ // MongoD 'latest' client -> MongoD upgraded 'last-stable' server
VALIDATE_WIRE_VERSION(ASSERT_OK,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1);
- // MongoD 3.4 client -> MongoD 3.2 server
+ // MongoD downgraded 'last-stable' client -> MongoD 'latest' server
VALIDATE_WIRE_VERSION(ASSERT_OK,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::FIND_COMMAND);
+ WireVersion::LATEST_WIRE_VERSION - 2,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION);
- // MongoD 3.2 client -> MongoD 3.4 server
+ // MongoD upgraded 'last-stable' client -> MongoD 'latest' server
VALIDATE_WIRE_VERSION(ASSERT_OK,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION);
- // MongoS 3.4 client -> MongoD 3.4 server
+ // MongoS 'latest' client -> MongoD 'latest' server
VALIDATE_WIRE_VERSION(ASSERT_OK,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION);
- // MongoS 3.2 client -> MongoD 3.4 server
+ // MongoS 'last-stable' client -> MongoD 'latest' server
VALIDATE_WIRE_VERSION(ASSERT_OK,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::FIND_COMMAND,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION);
+ /*
+ * Test communication with a MongoD latest binary server with upgraded FCV.
+ */
+
+ // MongoD 'latest' client -> MongoD 'latest' server
+ VALIDATE_WIRE_VERSION(ASSERT_OK,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION);
+
+ // MongoD 'latest' client -> MongoD downgraded 'last-stable' server
+ VALIDATE_WIRE_VERSION(ASSERT_NOT_OK,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 2,
+ WireVersion::LATEST_WIRE_VERSION - 1);
+
+ // MongoD 'latest' client -> MongoD upgraded 'last-stable' server
+ VALIDATE_WIRE_VERSION(ASSERT_NOT_OK,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1);
+
+ // MongoD downgraded 'last-stable' client -> MongoD 'latest' server
+ VALIDATE_WIRE_VERSION(ASSERT_NOT_OK,
+ WireVersion::LATEST_WIRE_VERSION - 2,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION);
+
+ // MongoD upgraded 'last-stable' client -> MongoD 'latest' server
+ VALIDATE_WIRE_VERSION(ASSERT_NOT_OK,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION);
+
+ // MongoS 'latest' client -> MongoD 'latest' server
+ VALIDATE_WIRE_VERSION(ASSERT_OK,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION);
+
+ // MongoS 'last-stable' client -> MongoD 'latest' server
+ VALIDATE_WIRE_VERSION(ASSERT_NOT_OK,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION);
+
+ /*
+ * Test communication between MongoD latest binary servers where one has upgraded FCV and the
+ * other downgraded FCV.
+ */
+
+ // MongoD upgraded 'latest' client -> MongoD downgraded 'latest' server
+ VALIDATE_WIRE_VERSION(ASSERT_OK,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION);
+
+ // MongoD downgraded 'latest' client -> MongoD upgraded 'latest' server
+ VALIDATE_WIRE_VERSION(ASSERT_OK,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION);
+
+ /*
+ * Test that it is disallowed for MongoS to communicate with a lower binary server, regardless
+ * of FCV.
+ */
+
+ // MongoS 'latest' -> MongoD downgraded 'last-stable' server
+ VALIDATE_WIRE_VERSION(ASSERT_NOT_OK,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 2,
+ WireVersion::LATEST_WIRE_VERSION - 1);
- // Disallowed
- // MongoS 3.4 -> MongoDB 3.2 server
+ // MongoS 'latest' -> MongoD upgraded 'last-stable' server
VALIDATE_WIRE_VERSION(ASSERT_NOT_OK,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN,
- WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN,
- WireVersion::RELEASE_2_4_AND_BEFORE,
- WireVersion::FIND_COMMAND);
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION,
+ WireVersion::LATEST_WIRE_VERSION - 1,
+ WireVersion::LATEST_WIRE_VERSION - 1);
}
} // namespace
diff --git a/src/mongo/s/catalog/sharding_catalog_add_shard_test.cpp b/src/mongo/s/catalog/sharding_catalog_add_shard_test.cpp
index 5ce39eba1bf..e3695912e20 100644
--- a/src/mongo/s/catalog/sharding_catalog_add_shard_test.cpp
+++ b/src/mongo/s/catalog/sharding_catalog_add_shard_test.cpp
@@ -140,7 +140,7 @@ protected:
ASSERT_EQ(request.dbname, "admin");
ASSERT_BSONOBJ_EQ(request.cmdObj,
BSON("setFeatureCompatibilityVersion"
- << "3.4"));
+ << "3.6"));
return response;
});
@@ -401,7 +401,7 @@ TEST_F(AddShardTest, StandaloneBasicSuccess) {
});
BSONObj commandResponse = BSON("ok" << 1 << "ismaster" << true << "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
// Get databases list from new shard
@@ -486,7 +486,7 @@ TEST_F(AddShardTest, StandaloneGenerateName) {
});
BSONObj commandResponse = BSON("ok" << 1 << "ismaster" << true << "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
// Get databases list from new shard
@@ -610,34 +610,6 @@ TEST_F(AddShardTest, AddMongosAsShard) {
future.timed_get(kLongFutureTimeout);
}
-// Attempt to add a pre-v3.4 mongod.
-TEST_F(AddShardTest, AddVersion32Shard) {
- std::unique_ptr<RemoteCommandTargeterMock> targeter(
- stdx::make_unique<RemoteCommandTargeterMock>());
- HostAndPort shardTarget("StandaloneHost:12345");
- targeter->setConnectionStringReturnValue(ConnectionString(shardTarget));
- targeter->setFindHostReturnValue(shardTarget);
-
- targeterFactory()->addTargeterToReturn(ConnectionString(shardTarget), std::move(targeter));
- std::string expectedShardName = "StandaloneShard";
-
- auto future = launchAsync([this, &expectedShardName, &shardTarget] {
- Client::initThreadIfNotAlready();
- auto status =
- ShardingCatalogManager::get(operationContext())
- ->addShard(
- operationContext(), &expectedShardName, ConnectionString(shardTarget), 100);
- ASSERT_EQUALS(ErrorCodes::IncompatibleServerVersion, status);
- });
-
- // The maxWireVersion indicates that this is a v3.2 shard.
- BSONObj commandResponse =
- BSON("ok" << 1 << "ismaster" << true << "maxWireVersion" << WireVersion::FIND_COMMAND);
- expectIsMaster(shardTarget, commandResponse);
-
- future.timed_get(kLongFutureTimeout);
-}
-
// A replica set name was found for the host but no name was provided with the host.
TEST_F(AddShardTest, AddReplicaSetShardAsStandalone) {
std::unique_ptr<RemoteCommandTargeterMock> targeter(
@@ -662,7 +634,7 @@ TEST_F(AddShardTest, AddReplicaSetShardAsStandalone) {
BSONObj commandResponse = BSON("ok" << 1 << "ismaster" << true << "setName"
<< "myOtherSet"
<< "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
future.timed_get(kLongFutureTimeout);
@@ -690,7 +662,7 @@ TEST_F(AddShardTest, AddStandaloneHostShardAsReplicaSet) {
});
BSONObj commandResponse = BSON("ok" << 1 << "ismaster" << true << "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
future.timed_get(kLongFutureTimeout);
@@ -720,7 +692,7 @@ TEST_F(AddShardTest, ReplicaSetMistmatchedReplicaSetName) {
BSONObj commandResponse = BSON("ok" << 1 << "ismaster" << true << "setName"
<< "myOtherSet"
<< "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
future.timed_get(kLongFutureTimeout);
@@ -753,7 +725,7 @@ TEST_F(AddShardTest, ShardIsCSRSConfigServer) {
<< "configsvr"
<< true
<< "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
future.timed_get(kLongFutureTimeout);
@@ -788,7 +760,7 @@ TEST_F(AddShardTest, ReplicaSetMissingHostsProvidedInSeedList) {
<< "hosts"
<< hosts.arr()
<< "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
future.timed_get(kLongFutureTimeout);
@@ -824,7 +796,7 @@ TEST_F(AddShardTest, AddShardWithNameConfigFails) {
<< "hosts"
<< hosts.arr()
<< "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
future.timed_get(kLongFutureTimeout);
@@ -873,7 +845,7 @@ TEST_F(AddShardTest, ShardContainsExistingDatabase) {
<< "hosts"
<< hosts.arr()
<< "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
expectListDatabases(shardTarget, {BSON("name" << existingDB.getName())});
@@ -920,7 +892,7 @@ TEST_F(AddShardTest, SuccessfullyAddReplicaSet) {
<< "hosts"
<< hosts.arr()
<< "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
// Get databases list from new shard
@@ -987,7 +959,7 @@ TEST_F(AddShardTest, ReplicaSetExtraHostsDiscovered) {
<< "hosts"
<< hosts.arr()
<< "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
// Get databases list from new shard
@@ -1063,7 +1035,7 @@ TEST_F(AddShardTest, AddShardSucceedsEvenIfAddingDBsFromNewShardFails) {
});
BSONObj commandResponse = BSON("ok" << 1 << "ismaster" << true << "maxWireVersion"
- << WireVersion::COMMANDS_ACCEPT_WRITE_CONCERN);
+ << WireVersion::LATEST_WIRE_VERSION);
expectIsMaster(shardTarget, commandResponse);
// Get databases list from new shard
diff --git a/src/mongo/s/catalog/sharding_catalog_manager_shard_operations.cpp b/src/mongo/s/catalog/sharding_catalog_manager_shard_operations.cpp
index bb208c19063..ac28fb3b82c 100644
--- a/src/mongo/s/catalog/sharding_catalog_manager_shard_operations.cpp
+++ b/src/mongo/s/catalog/sharding_catalog_manager_shard_operations.cpp
@@ -306,7 +306,12 @@ StatusWith<ShardType> ShardingCatalogManager::_validateHostAsShard(
const ConnectionString& connectionString) {
auto swCommandResponse =
_runCommandForAddShard(opCtx, targeter.get(), "admin", BSON("isMaster" << 1));
- if (!swCommandResponse.isOK()) {
+ if (swCommandResponse.getStatus() == ErrorCodes::IncompatibleServerVersion) {
+ return {swCommandResponse.getStatus().code(),
+ str::stream() << "Cannot add " << connectionString.toString()
+ << " as a shard because its binary version is not compatible with "
+ "the cluster's featureCompatibilityVersion."};
+ } else if (!swCommandResponse.isOK()) {
return swCommandResponse.getStatus();
}
@@ -328,8 +333,11 @@ StatusWith<ShardType> ShardingCatalogManager::_validateHostAsShard(
return {ErrorCodes::IllegalOperation, "cannot add a mongos as a shard"};
}
- // Fail if the node being added's binary version is lower than the cluster's
- // featureCompatibilityVersion.
+ // Extract the maxWireVersion so we can verify that the node being added has a binary version
+ // greater than or equal to the cluster's featureCompatibilityVersion. We expect an incompatible
+ // binary node to be unable to communicate, returning an IncompatibleServerVersion error,
+ // because of our internal wire version protocol. So we can safely invariant here that the node
+ // is compatible.
long long maxWireVersion;
Status status = bsonExtractIntegerField(resIsMaster, "maxWireVersion", &maxWireVersion);
if (!status.isOK()) {
@@ -340,16 +348,11 @@ StatusWith<ShardType> ShardingCatalogManager::_validateHostAsShard(
<< " as a shard: "
<< status.reason());
}
- if (((serverGlobalParams.featureCompatibility.getVersion() ==
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) &&
- maxWireVersion < WireVersion::LATEST_WIRE_VERSION) ||
- ((serverGlobalParams.featureCompatibility.getVersion() !=
- ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36) &&
- maxWireVersion < WireVersion::LATEST_WIRE_VERSION - 1)) {
- return {ErrorCodes::IncompatibleServerVersion,
- str::stream() << "Cannot add " << connectionString.toString()
- << " as a shard because its binary version is not compatible with "
- "the cluster's featureCompatibilityVersion."};
+ if (serverGlobalParams.featureCompatibility.getVersion() ==
+ ServerGlobalParams::FeatureCompatibility::Version::kFullyDowngradedTo34) {
+ invariant(maxWireVersion >= WireVersion::LATEST_WIRE_VERSION - 1);
+ } else {
+ invariant(maxWireVersion >= WireVersion::LATEST_WIRE_VERSION);
}
// Check whether there is a master. If there isn't, the replica set may not have been
diff --git a/src/mongo/s/sharding_mongod_test_fixture.cpp b/src/mongo/s/sharding_mongod_test_fixture.cpp
index a211fa3e4f9..df8dcd88f48 100644
--- a/src/mongo/s/sharding_mongod_test_fixture.cpp
+++ b/src/mongo/s/sharding_mongod_test_fixture.cpp
@@ -145,6 +145,11 @@ void ShardingMongodTestFixture::setUp() {
service->setOpObserver(stdx::make_unique<OpObserverImpl>());
repl::setOplogCollectionName();
repl::createOplog(_opCtx.get());
+
+ // Set the highest FCV because otherwise it defaults to the lower FCV. This way we default to
+ // testing this release's code, not backwards compatibility code.
+ serverGlobalParams.featureCompatibility.setVersion(
+ ServerGlobalParams::FeatureCompatibility::Version::kFullyUpgradedTo36);
}
std::unique_ptr<ReplicationCoordinatorMock> ShardingMongodTestFixture::makeReplicationCoordinator(