summaryrefslogtreecommitdiff
path: root/jstests/sharding/movePrimary1.js
diff options
context:
space:
mode:
authorBlake Oler <blake.oler@mongodb.com>2018-03-29 15:01:57 -0400
committerBlake Oler <blake.oler@mongodb.com>2018-04-02 15:13:45 -0400
commit04008276cc81cd234f042f25b3a65bca76a033ce (patch)
treecc4211455bc4f51b04aeabeb416eb49cb6e89e24 /jstests/sharding/movePrimary1.js
parent9055e4ea0230952af52e8cd396c63a8b407fdbf9 (diff)
downloadmongo-04008276cc81cd234f042f25b3a65bca76a033ce.tar.gz
SERVER-33769 Implement a commitMovePrimary command on the config server
Diffstat (limited to 'jstests/sharding/movePrimary1.js')
-rw-r--r--jstests/sharding/movePrimary1.js115
1 files changed, 62 insertions, 53 deletions
diff --git a/jstests/sharding/movePrimary1.js b/jstests/sharding/movePrimary1.js
index 9c36d8fbf88..6196b46070d 100644
--- a/jstests/sharding/movePrimary1.js
+++ b/jstests/sharding/movePrimary1.js
@@ -1,57 +1,66 @@
(function() {
'use strict';
- // TODO: SERVER-34093 Remove shardAsReplicaSet: false
- var s = new ShardingTest({shards: 2, other: {shardAsReplicaSet: false}});
-
- var db = s.getDB('test1');
- var c = db.foo;
- c.save({a: 1});
- c.save({a: 2});
- c.save({a: 3});
- assert.eq(3, c.count());
-
- assert.commandWorked(
- db.runCommand({create: "view", viewOn: "foo", pipeline: [{$match: {a: 3}}]}));
-
- var fromShard = s.getPrimaryShard('test1');
- var toShard = s.getOther(fromShard);
-
- assert.eq(3, fromShard.getDB("test1").foo.count(), "from doesn't have data before move");
- assert.eq(0, toShard.getDB("test1").foo.count(), "to has data before move");
- assert.eq(1, s.s.getDB("test1").view.count(), "count on view incorrect before move");
-
- s.printShardingStatus();
- assert.eq(s.normalize(s.config.databases.findOne({_id: "test1"}).primary),
- s.normalize(fromShard.name),
- "not in db correctly to start");
-
- var oldShardName = s.config.databases.findOne({_id: "test1"}).primary;
-
- assert.commandWorked(s.s0.adminCommand({movePrimary: "test1", to: toShard.name}));
- s.printShardingStatus();
- assert.eq(s.normalize(s.config.databases.findOne({_id: "test1"}).primary),
- s.normalize(toShard.name),
- "to in config db didn't change after first move");
-
- assert.eq(0, fromShard.getDB("test1").foo.count(), "from still has data after move");
- assert.eq(3, toShard.getDB("test1").foo.count(), "to doesn't have data after move");
- assert.eq(1, s.s.getDB("test1").view.count(), "count on view incorrect after move");
-
- // Move back, now using shard name instead of server address
- assert.commandWorked(s.s0.adminCommand({movePrimary: "test1", to: oldShardName}));
- s.printShardingStatus();
- assert.eq(s.normalize(s.config.databases.findOne({_id: "test1"}).primary),
- oldShardName,
- "to in config db didn't change after second move");
-
- assert.eq(3, fromShard.getDB("test1").foo.count(), "from doesn't have data after move back");
- assert.eq(0, toShard.getDB("test1").foo.count(), "to has data after move back");
- assert.eq(1, s.s.getDB("test1").view.count(), "count on view incorrect after move back");
-
- assert.commandFailedWithCode(s.s0.adminCommand({movePrimary: 'test1', to: 'dontexist'}),
- ErrorCodes.ShardNotFound,
- 'attempting to use non-existent shard as primary should fail');
-
- s.stop();
+ function movePrimary(useFCV40) {
+ // TODO: SERVER-34093 Remove shardAsReplicaSet: false
+ var s = new ShardingTest({shards: 2, other: {shardAsReplicaSet: false}});
+
+ var db = s.getDB('test1');
+ var c = db.foo;
+ c.save({a: 1});
+ c.save({a: 2});
+ c.save({a: 3});
+ assert.eq(3, c.count());
+
+ assert.commandWorked(
+ db.runCommand({create: "view", viewOn: "foo", pipeline: [{$match: {a: 3}}]}));
+
+ var fromShard = s.getPrimaryShard('test1');
+ var toShard = s.getOther(fromShard);
+
+ assert.eq(3, fromShard.getDB("test1").foo.count(), "from doesn't have data before move");
+ assert.eq(0, toShard.getDB("test1").foo.count(), "to has data before move");
+ assert.eq(1, s.s.getDB("test1").view.count(), "count on view incorrect before move");
+
+ s.printShardingStatus();
+ assert.eq(s.normalize(s.config.databases.findOne({_id: "test1"}).primary),
+ s.normalize(fromShard.name),
+ "not in db correctly to start");
+
+ var oldShardName = s.config.databases.findOne({_id: "test1"}).primary;
+
+ assert.commandWorked(
+ s.s0.adminCommand({movePrimary: "test1", to: toShard.name, forTest: useFCV40}));
+ s.printShardingStatus();
+ assert.eq(s.normalize(s.config.databases.findOne({_id: "test1"}).primary),
+ s.normalize(toShard.name),
+ "to in config db didn't change after first move");
+
+ assert.eq(0, fromShard.getDB("test1").foo.count(), "from still has data after move");
+ assert.eq(3, toShard.getDB("test1").foo.count(), "to doesn't have data after move");
+ assert.eq(1, s.s.getDB("test1").view.count(), "count on view incorrect after move");
+
+ // Move back, now using shard name instead of server address
+ assert.commandWorked(
+ s.s0.adminCommand({movePrimary: "test1", to: oldShardName, forTest: useFCV40}));
+ s.printShardingStatus();
+ assert.eq(s.normalize(s.config.databases.findOne({_id: "test1"}).primary),
+ oldShardName,
+ "to in config db didn't change after second move");
+
+ assert.eq(
+ 3, fromShard.getDB("test1").foo.count(), "from doesn't have data after move back");
+ assert.eq(0, toShard.getDB("test1").foo.count(), "to has data after move back");
+ assert.eq(1, s.s.getDB("test1").view.count(), "count on view incorrect after move back");
+
+ assert.commandFailedWithCode(
+ s.s0.adminCommand({movePrimary: 'test1', to: 'dontexist', forTest: useFCV40}),
+ ErrorCodes.ShardNotFound,
+ 'attempting to use non-existent shard as primary should fail');
+
+ s.stop();
+ }
+
+ movePrimary(false);
+ movePrimary(true);
})();