diff options
author | Blake Oler <blake.oler@mongodb.com> | 2018-03-29 15:01:57 -0400 |
---|---|---|
committer | Blake Oler <blake.oler@mongodb.com> | 2018-04-02 15:13:45 -0400 |
commit | 04008276cc81cd234f042f25b3a65bca76a033ce (patch) | |
tree | cc4211455bc4f51b04aeabeb416eb49cb6e89e24 /jstests/sharding/movePrimary1.js | |
parent | 9055e4ea0230952af52e8cd396c63a8b407fdbf9 (diff) | |
download | mongo-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.js | 115 |
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); })(); |