summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Storch <david.storch@10gen.com>2016-09-21 18:44:56 -0400
committerDavid Storch <david.storch@10gen.com>2016-09-22 18:41:37 -0400
commite114f74a9b3bf087f15dfbee5d7250b2839308e7 (patch)
tree75e3c02701ceebdd7b707aa37a32340495ec2b15
parent64819b40303060951f8b0c27b94d52d2dd04eed7 (diff)
downloadmongo-r3.3.13.tar.gz
SERVER-25158 prevent 3.2 mongos from connecting to a featureCompatibilityVersion 3.4 config serverr3.3.13
-rw-r--r--buildscripts/resmokeconfig/suites/multiversion.yml3
-rw-r--r--buildscripts/resmokeconfig/suites/sharding_last_stable_mongos_and_mixed_shards.yml5
-rw-r--r--jstests/sharding/server_status.js2
-rw-r--r--src/mongo/db/repl/replication_info.cpp9
-rw-r--r--src/mongo/s/client/sharding_connection_hook.cpp13
-rw-r--r--src/mongo/shell/shardingtest.js10
6 files changed, 32 insertions, 10 deletions
diff --git a/buildscripts/resmokeconfig/suites/multiversion.yml b/buildscripts/resmokeconfig/suites/multiversion.yml
index 95c81adcc12..c97b6fc8d98 100644
--- a/buildscripts/resmokeconfig/suites/multiversion.yml
+++ b/buildscripts/resmokeconfig/suites/multiversion.yml
@@ -8,6 +8,9 @@ selector:
- jstests/multiVersion/transitioning_to_and_from_WT.js
# TODO: SERVER-21578
- jstests/multiVersion/balancer_multiVersion_detect.js
+ # TODO: SERVER-26261
+ - jstests/multiVersion/2_test_launching_cluster.js
+ - jstests/multiVersion/dumprestore_sharded.js
# Multiversion tests start their own mongod's.
executor:
diff --git a/buildscripts/resmokeconfig/suites/sharding_last_stable_mongos_and_mixed_shards.yml b/buildscripts/resmokeconfig/suites/sharding_last_stable_mongos_and_mixed_shards.yml
index e7b5b9fbef7..97753edcf7b 100644
--- a/buildscripts/resmokeconfig/suites/sharding_last_stable_mongos_and_mixed_shards.yml
+++ b/buildscripts/resmokeconfig/suites/sharding_last_stable_mongos_and_mixed_shards.yml
@@ -66,6 +66,11 @@ selector:
# Testing features that do not exist on v3.2 shards.
- jstests/sharding/migration_server_status.js
- jstests/sharding/movechunk_parallel.js
+ # These tests do not use ShardingTest which handles setting the featureCompatibilityVersion to
+ # 3.2 when in a mixed configuration. Enable when 3.4 becomes last-stable.
+ - jstests/sharding/autodiscover_config_rs_from_secondary.js
+ - jstests/sharding/config_rs_change.js
+ - jstests/sharding/mongos_wait_csrs_initiate.js
executor:
js_test:
diff --git a/jstests/sharding/server_status.js b/jstests/sharding/server_status.js
index b8e59b22275..892e1748ed9 100644
--- a/jstests/sharding/server_status.js
+++ b/jstests/sharding/server_status.js
@@ -27,7 +27,7 @@
if (isCSRS) {
assert.gt(configConnStr.indexOf('/'), 0);
- assert.eq(1, configIsMaster.configsvr); // If it's a shard, this field won't exist.
+ assert.gte(configIsMaster.configsvr, 1); // If it's a shard, this field won't exist.
assert.neq(null, configOpTimeObj);
assert.neq(null, configOpTimeObj.ts);
assert.neq(null, configOpTimeObj.t);
diff --git a/src/mongo/db/repl/replication_info.cpp b/src/mongo/db/repl/replication_info.cpp
index d27257a8eb0..d655ccfa73b 100644
--- a/src/mongo/db/repl/replication_info.cpp
+++ b/src/mongo/db/repl/replication_info.cpp
@@ -279,7 +279,14 @@ public:
appendReplicationInfo(txn, result, 0);
if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer) {
- result.append("configsvr", 1);
+ // If we have feature compatibility version 3.4, use a config server mode that 3.2
+ // mongos won't understand. This should prevent a 3.2 mongos from joining the cluster or
+ // making a connection to the config servers.
+ int configServerModeNumber = (serverGlobalParams.featureCompatibility.version.load() ==
+ ServerGlobalParams::FeatureCompatibility::Version::k34)
+ ? 2
+ : 1;
+ result.append("configsvr", configServerModeNumber);
}
result.appendNumber("maxBsonObjectSize", BSONObjMaxUserSize);
diff --git a/src/mongo/s/client/sharding_connection_hook.cpp b/src/mongo/s/client/sharding_connection_hook.cpp
index b24bccd3381..7085a290a0c 100644
--- a/src/mongo/s/client/sharding_connection_hook.cpp
+++ b/src/mongo/s/client/sharding_connection_hook.cpp
@@ -99,10 +99,17 @@ void ShardingConnectionHook::onCreate(DBClientBase* conn) {
return;
}
+ const long long minKnownConfigServerMode = 1;
+ const long long maxKnownConfigServerMode = 2;
uassert(28785,
- str::stream() << "Unrecognized configsvr version number: " << configServerModeNumber
- << ". Expected either 0 or 1",
- configServerModeNumber == 0 || configServerModeNumber == 1);
+ str::stream() << "Unrecognized configsvr mode number: " << configServerModeNumber
+ << ". Range of known configsvr mode numbers is: ["
+ << minKnownConfigServerMode
+ << ", "
+ << maxKnownConfigServerMode
+ << "]",
+ configServerModeNumber >= minKnownConfigServerMode &&
+ configServerModeNumber <= maxKnownConfigServerMode);
uassertStatusOK(status);
}
diff --git a/src/mongo/shell/shardingtest.js b/src/mongo/shell/shardingtest.js
index 0eb553ecfca..fe042cbcafa 100644
--- a/src/mongo/shell/shardingtest.js
+++ b/src/mongo/shell/shardingtest.js
@@ -1226,29 +1226,29 @@ var ShardingTest = function(params) {
*/
function shouldSetFeatureCompatibilityVersion32() {
if (otherParams.configOptions && otherParams.configOptions.binVersion &&
- otherParams.configOptions.binVersion === '3.2') {
+ MongoRunner.getBinVersionFor(otherParams.configOptions.binVersion) === '3.2') {
return false;
}
if (jsTestOptions().shardMixedBinVersions) {
return true;
}
if (otherParams.shardOptions && otherParams.shardOptions.binVersion &&
- otherParams.shardOptions.binVersion === '3.2') {
+ MongoRunner.getBinVersionFor(otherParams.shardOptions.binVersion) === '3.2') {
return true;
}
for (var i = 0; i < numShards; i++) {
if (otherParams['d' + i] && otherParams['d' + i].binVersion &&
- otherParams['d' + i].binVersion === '3.2') {
+ MongoRunner.getBinVersionFor(otherParams['d' + i].binVersion) === '3.2') {
return true;
}
}
if (otherParams.mongosOptions && otherParams.mongosOptions.binVersion &&
- otherParams.mongosOptions.binVersion === '3.2') {
+ MongoRunner.getBinVersionFor(otherParams.mongosOptions.binVersion) === '3.2') {
return true;
}
for (var i = 0; i < numMongos; i++) {
if (otherParams['s' + i] && otherParams['s' + i].binVersion &&
- otherParams['s' + i].binVersion === '3.2') {
+ MongoRunner.getBinVersionFor(otherParams['s' + i].binVersion) === '3.2') {
return true;
}
}