diff options
Diffstat (limited to 'jstests/sharding/remove3.js')
-rw-r--r-- | jstests/sharding/remove3.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/jstests/sharding/remove3.js b/jstests/sharding/remove3.js new file mode 100644 index 00000000000..1ca64fc3d10 --- /dev/null +++ b/jstests/sharding/remove3.js @@ -0,0 +1,48 @@ +// Validates the remove/drain shard functionality when there is data on the shard being removed +(function() { +'use strict'; + +var st = new ShardingTest({ name: "remove_shard3", shards: 2, mongos: 2 }); + +assert.commandWorked(st.s0.adminCommand({ enableSharding: 'TestDB' })); +st.ensurePrimaryShard('TestDB', 'shard0000'); +assert.commandWorked(st.s0.adminCommand({ shardCollection: 'TestDB.Coll', key: { _id: 1 } })); +assert.commandWorked(st.s0.adminCommand({ split: 'TestDB.Coll', middle: { _id: 0 } })); + +// Insert some documents and make sure there are docs on both shards +st.s0.getDB('TestDB').Coll.insert({ _id: -1, value: 'Negative value' }); +st.s0.getDB('TestDB').Coll.insert({ _id: 1, value: 'Positive value' }); + +assert.commandWorked(st.s0.adminCommand({ moveChunk: 'TestDB.Coll', + find: { _id: 1 }, + to: 'shard0001', + _waitForDelete: true })); + +// Make sure both mongos instances know of the latest metadata +assert.eq(2, st.s0.getDB('TestDB').Coll.find({}).toArray().length); +assert.eq(2, st.s1.getDB('TestDB').Coll.find({}).toArray().length); + +// Remove shard0001 +var removeRes; +removeRes = assert.commandWorked(st.s0.adminCommand({ removeShard: 'shard0001' })); +assert.eq('started', removeRes.state); +removeRes = assert.commandWorked(st.s0.adminCommand({ removeShard: 'shard0001' })); +assert.eq('ongoing', removeRes.state); + +// Move the one chunk off shard0001 +assert.commandWorked(st.s0.adminCommand({ moveChunk: 'TestDB.Coll', + find: { _id: 1 }, + to: 'shard0000', + _waitForDelete: true })); + +// Remove shard must succeed now +removeRes = assert.commandWorked(st.s0.adminCommand({ removeShard: 'shard0001' })); +assert.eq('completed', removeRes.state); + +// Make sure both mongos instance refresh their metadata and do not reference the missing shard +assert.eq(2, st.s0.getDB('TestDB').Coll.find({}).toArray().length); +assert.eq(2, st.s1.getDB('TestDB').Coll.find({}).toArray().length); + +st.stop(); + +})(); |