summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEsha Maharishi <esha.maharishi@mongodb.com>2016-08-31 14:34:39 -0400
committerEsha Maharishi <esha.maharishi@mongodb.com>2016-09-07 23:03:50 -0400
commit2d3d3d3a92e2b1549a638a6f06d8c408625a2287 (patch)
treeb2aceb7900bc06add1956aaea6d493db7eb4e211
parent410fefd45f65e7899d60ed420a81d6127d687fa8 (diff)
downloadmongo-2d3d3d3a92e2b1549a638a6f06d8c408625a2287.tar.gz
SERVER-25910 fail setShardVersion on mongod if not running with --shardsvr
-rw-r--r--buildscripts/resmokeconfig/suites/read_only_sharded.yml4
-rw-r--r--jstests/sharding/addshard1.js4
-rw-r--r--jstests/sharding/addshard5.js2
-rw-r--r--jstests/sharding/localhostAuthBypass.js3
-rw-r--r--jstests/sharding/sharding_rs2.js2
-rw-r--r--jstests/sharding/ssv_config_check.js28
-rw-r--r--jstests/sharding/use_rsm_data_for_cs.js2
-rw-r--r--src/mongo/base/error_codes.err1
-rw-r--r--src/mongo/db/commands/dbcommands.cpp4
-rw-r--r--src/mongo/db/s/set_shard_version_command.cpp6
-rw-r--r--src/mongo/s/client/version_manager.cpp4
11 files changed, 24 insertions, 36 deletions
diff --git a/buildscripts/resmokeconfig/suites/read_only_sharded.yml b/buildscripts/resmokeconfig/suites/read_only_sharded.yml
index 2d2292e5913..88e709f1237 100644
--- a/buildscripts/resmokeconfig/suites/read_only_sharded.yml
+++ b/buildscripts/resmokeconfig/suites/read_only_sharded.yml
@@ -4,8 +4,12 @@ selector:
- jstests/readonly/*.js
exclude_files:
# TODO: re-enable in SERVER-25549
+ - jstests/readonly/aggregate.js
+ - jstests/readonly/count.js
+ - jstests/readonly/distinct.js
- jstests/readonly/find.js
- jstests/readonly/get_more.js
+ - jstests/readonly/temp_collection.js
executor:
js_test:
diff --git a/jstests/sharding/addshard1.js b/jstests/sharding/addshard1.js
index e8cdf84e9ef..0c9a5236541 100644
--- a/jstests/sharding/addshard1.js
+++ b/jstests/sharding/addshard1.js
@@ -5,7 +5,7 @@
// Create a shard and add a database; if the database is not duplicated the mongod should accept
// it as shard
- var conn1 = MongoRunner.runMongod({});
+ var conn1 = MongoRunner.runMongod({'shardsvr': ""});
var db1 = conn1.getDB("testDB");
var numObjs = 3;
@@ -26,7 +26,7 @@
assert.eq(1024, newShardDoc.maxSize);
// a mongod with an existing database name should not be allowed to become a shard
- var conn2 = MongoRunner.runMongod({});
+ var conn2 = MongoRunner.runMongod({'shardsvr': ""});
var db2 = conn2.getDB("otherDB");
assert.writeOK(db2.foo.save({a: 1}));
diff --git a/jstests/sharding/addshard5.js b/jstests/sharding/addshard5.js
index 259e1041aba..cedbe721177 100644
--- a/jstests/sharding/addshard5.js
+++ b/jstests/sharding/addshard5.js
@@ -36,7 +36,7 @@
assert.commandWorked(mongos.adminCommand({removeShard: shards[1]._id}));
assert.commandWorked(mongos.adminCommand({removeShard: shards[1]._id}));
- var shard2 = MongoRunner.runMongod({});
+ var shard2 = MongoRunner.runMongod({'shardsvr': ''});
assert.commandWorked(mongos.adminCommand({addShard: shard2.host, name: shards[1]._id}));
jsTest.log('Shard was dropped and re-added with same name...');
diff --git a/jstests/sharding/localhostAuthBypass.js b/jstests/sharding/localhostAuthBypass.js
index 26e2c677dbf..cd152410e3c 100644
--- a/jstests/sharding/localhostAuthBypass.js
+++ b/jstests/sharding/localhostAuthBypass.js
@@ -27,7 +27,8 @@
};
var addShard = function(st, shouldPass) {
- var m = MongoRunner.runMongod({auth: "", keyFile: keyfile, useHostname: false});
+ var m =
+ MongoRunner.runMongod({auth: "", keyFile: keyfile, useHostname: false, 'shardsvr': ''});
var res = st.getDB("admin").runCommand({addShard: m.host});
if (shouldPass) {
assert.commandWorked(res, "Add shard");
diff --git a/jstests/sharding/sharding_rs2.js b/jstests/sharding/sharding_rs2.js
index 58129d9fe46..7da1a239012 100644
--- a/jstests/sharding/sharding_rs2.js
+++ b/jstests/sharding/sharding_rs2.js
@@ -56,7 +56,7 @@
assert.eq(2, countNodes(), "A1");
var rs = s.rs0;
- rs.add();
+ rs.add({'shardsvr': ""});
try {
rs.reInitiate();
} catch (e) {
diff --git a/jstests/sharding/ssv_config_check.js b/jstests/sharding/ssv_config_check.js
index edeb559d40d..b909f98f1f6 100644
--- a/jstests/sharding/ssv_config_check.js
+++ b/jstests/sharding/ssv_config_check.js
@@ -40,33 +40,5 @@
shardHost: shardDoc.host
}));
- var configAdmin = st.c0.getDB('admin');
- // Initialize internal config string.
- assert.commandWorked(configAdmin.runCommand({
- setShardVersion: '',
- init: true,
- authoritative: true,
- configdb: configStr,
- shard: 'config'
- }));
-
- // Passing configdb that does not match initialized value is not ok.
- assert.commandFailed(configAdmin.runCommand({
- setShardVersion: '',
- init: true,
- authoritative: true,
- configdb: 'bad-rs/local:12,local:34',
- shard: 'config'
- }));
-
- // Passing configdb that matches initialized value is ok.
- assert.commandWorked(configAdmin.runCommand({
- setShardVersion: '',
- init: true,
- authoritative: true,
- configdb: alternateConfigStr,
- shard: 'config'
- }));
-
st.stop();
})();
diff --git a/jstests/sharding/use_rsm_data_for_cs.js b/jstests/sharding/use_rsm_data_for_cs.js
index db05f7b5f2d..0b10a0542cd 100644
--- a/jstests/sharding/use_rsm_data_for_cs.js
+++ b/jstests/sharding/use_rsm_data_for_cs.js
@@ -19,7 +19,7 @@
});
// add a node to shard rs
- rs.add();
+ rs.add({'shardsvr': ''});
rs.reInitiate();
rs.awaitSecondaryNodes();
diff --git a/src/mongo/base/error_codes.err b/src/mongo/base/error_codes.err
index 0cac2a6528f..8f442c018a4 100644
--- a/src/mongo/base/error_codes.err
+++ b/src/mongo/base/error_codes.err
@@ -191,6 +191,7 @@ error_code("PrimarySteppedDown", 189)
error_code("MasterSlaveConnectionFailure", 190)
error_code("BalancerLostDistributedLock", 191)
error_code("FailPointEnabled", 192)
+error_code("NoShardingEnabled", 193)
# Non-sequential error codes (for compatibility only)
error_code("SocketException", 9001)
diff --git a/src/mongo/db/commands/dbcommands.cpp b/src/mongo/db/commands/dbcommands.cpp
index 0bbdfb5e1cf..794896db52c 100644
--- a/src/mongo/db/commands/dbcommands.cpp
+++ b/src/mongo/db/commands/dbcommands.cpp
@@ -1304,14 +1304,14 @@ void Command::execCommand(OperationContext* txn,
if (oss.hasShardVersion()) {
if (serverGlobalParams.clusterRole != ClusterRole::ShardServer) {
uassertStatusOK(
- {ErrorCodes::IllegalOperation,
+ {ErrorCodes::NoShardingEnabled,
"Cannot accept sharding commands if not started with --shardsvr"});
} else if (!shardingState->enabled()) {
// TODO(esha): Once 3.4 ships, we no longer need to support initializing
// sharding awareness through commands, so just reject all sharding commands.
if (!shardingState->commandInitializesShardingAwareness(
request.getCommandName().toString())) {
- uassertStatusOK({ErrorCodes::IllegalOperation,
+ uassertStatusOK({ErrorCodes::NoShardingEnabled,
str::stream()
<< "Received a command with sharding chunk version "
"information but this node is not sharding aware: "
diff --git a/src/mongo/db/s/set_shard_version_command.cpp b/src/mongo/db/s/set_shard_version_command.cpp
index 723721e67d7..08bb9db3cbe 100644
--- a/src/mongo/db/s/set_shard_version_command.cpp
+++ b/src/mongo/db/s/set_shard_version_command.cpp
@@ -94,6 +94,12 @@ public:
int options,
string& errmsg,
BSONObjBuilder& result) {
+
+ if (serverGlobalParams.clusterRole != ClusterRole::ShardServer) {
+ uassertStatusOK({ErrorCodes::NoShardingEnabled,
+ "Cannot accept sharding commands if not started with --shardsvr"});
+ }
+
// Steps
// 1. check basic config
// 2. extract params from command
diff --git a/src/mongo/s/client/version_manager.cpp b/src/mongo/s/client/version_manager.cpp
index d129ba9853d..99a63f0aa17 100644
--- a/src/mongo/s/client/version_manager.cpp
+++ b/src/mongo/s/client/version_manager.cpp
@@ -361,6 +361,10 @@ bool checkShardVersion(OperationContext* txn,
return true;
}
+ // If the shard rejected the setShardVersion, return the error to the user.
+ int errCode = result["code"].numberInt();
+ uassert(errCode, result["errmsg"].String(), errCode != ErrorCodes::NoShardingEnabled);
+
LOG(1) << " setShardVersion failed!\n" << result;
if (result["need_authoritative"].trueValue())