diff options
Diffstat (limited to 'jstests/sharding/split_large_key.js')
-rw-r--r-- | jstests/sharding/split_large_key.js | 105 |
1 files changed, 52 insertions, 53 deletions
diff --git a/jstests/sharding/split_large_key.js b/jstests/sharding/split_large_key.js index 5a5504594d2..5ee2ecf7bc7 100644 --- a/jstests/sharding/split_large_key.js +++ b/jstests/sharding/split_large_key.js @@ -1,68 +1,67 @@ // Test for splitting a chunk with a very large shard key value should not be allowed // and does not corrupt the config.chunks metadata. (function() { - 'use strict'; +'use strict'; - function verifyChunk(keys, expectFail, ns) { - // If split failed then there's only 1 chunk - // With a min & max for the shardKey - if (expectFail) { - assert.eq(1, configDB.chunks.find({"ns": ns}).count(), "Chunks count no split"); - var chunkDoc = configDB.chunks.findOne({"ns": ns}); - assert.eq(0, bsonWoCompare(chunkDoc.min, keys.min), "Chunks min"); - assert.eq(0, bsonWoCompare(chunkDoc.max, keys.max), "Chunks max"); - } else { - assert.eq(2, configDB.chunks.find({"ns": ns}).count(), "Chunks count split"); - } +function verifyChunk(keys, expectFail, ns) { + // If split failed then there's only 1 chunk + // With a min & max for the shardKey + if (expectFail) { + assert.eq(1, configDB.chunks.find({"ns": ns}).count(), "Chunks count no split"); + var chunkDoc = configDB.chunks.findOne({"ns": ns}); + assert.eq(0, bsonWoCompare(chunkDoc.min, keys.min), "Chunks min"); + assert.eq(0, bsonWoCompare(chunkDoc.max, keys.max), "Chunks max"); + } else { + assert.eq(2, configDB.chunks.find({"ns": ns}).count(), "Chunks count split"); } +} - // Tests - // - name: Name of test, used in collection name - // - key: key to test - // - keyFieldSize: size of each key field - // - expectFail: true/false, true if key is too large to pre-split - var tests = [ - {name: "Key size small", key: {x: 1}, keyFieldSize: 100, expectFail: false}, - {name: "Key size 512", key: {x: 1}, keyFieldSize: 512, expectFail: true}, - {name: "Key size 2000", key: {x: 1}, keyFieldSize: 2000, expectFail: true}, - {name: "Compound key size small", key: {x: 1, y: 1}, keyFieldSize: 100, expectFail: false}, - {name: "Compound key size 512", key: {x: 1, y: 1}, keyFieldSize: 256, expectFail: true}, - {name: "Compound key size 10000", key: {x: 1, y: 1}, keyFieldSize: 5000, expectFail: true}, - ]; +// Tests +// - name: Name of test, used in collection name +// - key: key to test +// - keyFieldSize: size of each key field +// - expectFail: true/false, true if key is too large to pre-split +var tests = [ + {name: "Key size small", key: {x: 1}, keyFieldSize: 100, expectFail: false}, + {name: "Key size 512", key: {x: 1}, keyFieldSize: 512, expectFail: true}, + {name: "Key size 2000", key: {x: 1}, keyFieldSize: 2000, expectFail: true}, + {name: "Compound key size small", key: {x: 1, y: 1}, keyFieldSize: 100, expectFail: false}, + {name: "Compound key size 512", key: {x: 1, y: 1}, keyFieldSize: 256, expectFail: true}, + {name: "Compound key size 10000", key: {x: 1, y: 1}, keyFieldSize: 5000, expectFail: true}, +]; - var st = new ShardingTest({shards: 1}); - var configDB = st.s.getDB('config'); +var st = new ShardingTest({shards: 1}); +var configDB = st.s.getDB('config'); - assert.commandWorked(configDB.adminCommand({enableSharding: 'test'})); +assert.commandWorked(configDB.adminCommand({enableSharding: 'test'})); - tests.forEach(function(test) { - var collName = "split_large_key_" + test.name; - var midKey = {}; - var chunkKeys = {min: {}, max: {}}; - for (var k in test.key) { - // new Array with join creates string length 1 less than size, so add 1 - midKey[k] = new Array(test.keyFieldSize + 1).join('a'); - // min & max keys for each field in the index - chunkKeys.min[k] = MinKey; - chunkKeys.max[k] = MaxKey; - } - - assert.commandWorked( - configDB.adminCommand({shardCollection: "test." + collName, key: test.key})); +tests.forEach(function(test) { + var collName = "split_large_key_" + test.name; + var midKey = {}; + var chunkKeys = {min: {}, max: {}}; + for (var k in test.key) { + // new Array with join creates string length 1 less than size, so add 1 + midKey[k] = new Array(test.keyFieldSize + 1).join('a'); + // min & max keys for each field in the index + chunkKeys.min[k] = MinKey; + chunkKeys.max[k] = MaxKey; + } - var res = configDB.adminCommand({split: "test." + collName, middle: midKey}); - if (test.expectFail) { - assert(!res.ok, "Split: " + collName); - assert(res.errmsg !== null, "Split errmsg: " + collName); - } else { - assert(res.ok, "Split: " + collName + " " + res.errmsg); - } + assert.commandWorked( + configDB.adminCommand({shardCollection: "test." + collName, key: test.key})); - verifyChunk(chunkKeys, test.expectFail, "test." + collName); + var res = configDB.adminCommand({split: "test." + collName, middle: midKey}); + if (test.expectFail) { + assert(!res.ok, "Split: " + collName); + assert(res.errmsg !== null, "Split errmsg: " + collName); + } else { + assert(res.ok, "Split: " + collName + " " + res.errmsg); + } - st.s0.getCollection("test." + collName).drop(); - }); + verifyChunk(chunkKeys, test.expectFail, "test." + collName); - st.stop(); + st.s0.getCollection("test." + collName).drop(); +}); +st.stop(); })(); |