summaryrefslogtreecommitdiff
path: root/jstests/sharding/bulk_insert.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/sharding/bulk_insert.js')
-rw-r--r--jstests/sharding/bulk_insert.js490
1 files changed, 224 insertions, 266 deletions
diff --git a/jstests/sharding/bulk_insert.js b/jstests/sharding/bulk_insert.js
index 306c2a82020..715660fa67f 100644
--- a/jstests/sharding/bulk_insert.js
+++ b/jstests/sharding/bulk_insert.js
@@ -1,327 +1,285 @@
// Tests bulk inserts to mongos
(function() {
-'use strict';
+ 'use strict';
-var st = new ShardingTest({ shards : 2, mongos : 2 });
+ var st = new ShardingTest({shards: 2, mongos: 2});
-var mongos = st.s;
-var staleMongos = st.s1;
-var config = mongos.getDB("config");
-var admin = mongos.getDB("admin");
-var shards = config.shards.find().toArray();
+ var mongos = st.s;
+ var staleMongos = st.s1;
+ var config = mongos.getDB("config");
+ var admin = mongos.getDB("admin");
+ var shards = config.shards.find().toArray();
-for (var i = 0; i < shards.length; i++) {
- shards[i].conn = new Mongo(shards[i].host);
-}
+ for (var i = 0; i < shards.length; i++) {
+ shards[i].conn = new Mongo(shards[i].host);
+ }
-var collSh = mongos.getCollection(jsTestName() + ".collSharded");
-var collUn = mongos.getCollection(jsTestName() + ".collUnsharded");
-var collDi = shards[0].conn.getCollection(jsTestName() + ".collDirect");
+ var collSh = mongos.getCollection(jsTestName() + ".collSharded");
+ var collUn = mongos.getCollection(jsTestName() + ".collUnsharded");
+ var collDi = shards[0].conn.getCollection(jsTestName() + ".collDirect");
-jsTest.log('Checking write to config collections...');
-assert.writeOK(admin.TestColl.insert({ SingleDoc: 1 }));
-assert.writeError(admin.TestColl.insert([ { Doc1: 1 }, { Doc2: 1 } ]));
+ jsTest.log('Checking write to config collections...');
+ assert.writeOK(admin.TestColl.insert({SingleDoc: 1}));
+ assert.writeError(admin.TestColl.insert([{Doc1: 1}, {Doc2: 1}]));
-jsTest.log("Setting up collections...");
+ jsTest.log("Setting up collections...");
-assert.commandWorked(admin.runCommand({ enableSharding : collSh.getDB() + "" }));
-st.ensurePrimaryShard(collSh.getDB() + "", shards[0]._id);
+ assert.commandWorked(admin.runCommand({enableSharding: collSh.getDB() + ""}));
+ st.ensurePrimaryShard(collSh.getDB() + "", shards[0]._id);
-assert.commandWorked(admin.runCommand({ movePrimary : collUn.getDB() + "",
- to : shards[1]._id}));
+ assert.commandWorked(admin.runCommand({movePrimary: collUn.getDB() + "", to: shards[1]._id}));
-printjson(collSh.ensureIndex({ukey : 1}, {unique : true}));
-printjson(collUn.ensureIndex({ukey : 1}, {unique : true}));
-printjson(collDi.ensureIndex({ukey : 1}, {unique : true}));
+ printjson(collSh.ensureIndex({ukey: 1}, {unique: true}));
+ printjson(collUn.ensureIndex({ukey: 1}, {unique: true}));
+ printjson(collDi.ensureIndex({ukey: 1}, {unique: true}));
-assert.commandWorked(admin.runCommand({ shardCollection : collSh + "",
- key : {ukey : 1} }));
-assert.commandWorked(admin.runCommand({ split : collSh + "",
- middle : {ukey : 0} }));
-assert.commandWorked(admin.runCommand({ moveChunk: collSh + "",
- find: { ukey: 0 },
- to: shards[0]._id,
- _waitForDelete: true }));
+ assert.commandWorked(admin.runCommand({shardCollection: collSh + "", key: {ukey: 1}}));
+ assert.commandWorked(admin.runCommand({split: collSh + "", middle: {ukey: 0}}));
+ assert.commandWorked(admin.runCommand(
+ {moveChunk: collSh + "", find: {ukey: 0}, to: shards[0]._id, _waitForDelete: true}));
-var resetColls = function() {
- assert.writeOK(collSh.remove({}));
- assert.writeOK(collUn.remove({}));
- assert.writeOK(collDi.remove({}));
-};
+ var resetColls = function() {
+ assert.writeOK(collSh.remove({}));
+ assert.writeOK(collUn.remove({}));
+ assert.writeOK(collDi.remove({}));
+ };
-var isDupKeyError = function(err) {
- return /dup key/.test(err + "");
-};
+ var isDupKeyError = function(err) {
+ return /dup key/.test(err + "");
+ };
-jsTest.log("Collections created.");
-st.printShardingStatus();
+ jsTest.log("Collections created.");
+ st.printShardingStatus();
-//
-// BREAK-ON-ERROR
-//
+ //
+ // BREAK-ON-ERROR
+ //
-jsTest.log("Bulk insert (no ContinueOnError) to single shard...");
+ jsTest.log("Bulk insert (no ContinueOnError) to single shard...");
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 1}];
+ resetColls();
+ var inserts = [{ukey: 0}, {ukey: 1}];
-assert.writeOK(collSh.insert(inserts));
-assert.eq(2, collSh.find().itcount());
+ assert.writeOK(collSh.insert(inserts));
+ assert.eq(2, collSh.find().itcount());
-assert.writeOK(collUn.insert(inserts));
-assert.eq(2, collUn.find().itcount());
+ assert.writeOK(collUn.insert(inserts));
+ assert.eq(2, collUn.find().itcount());
-assert.writeOK(collDi.insert(inserts));
-assert.eq(2, collDi.find().itcount());
+ assert.writeOK(collDi.insert(inserts));
+ assert.eq(2, collDi.find().itcount());
-jsTest.log("Bulk insert (no COE) with mongos error...");
+ jsTest.log("Bulk insert (no COE) with mongos error...");
-resetColls();
-var inserts = [{ukey : 0},
- {hello : "world"},
- {ukey : 1}];
+ resetColls();
+ var inserts = [{ukey: 0}, {hello: "world"}, {ukey: 1}];
-assert.writeError(collSh.insert(inserts));
-assert.eq(1, collSh.find().itcount());
+ assert.writeError(collSh.insert(inserts));
+ assert.eq(1, collSh.find().itcount());
-jsTest.log("Bulk insert (no COE) with mongod error...");
+ jsTest.log("Bulk insert (no COE) with mongod error...");
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 0},
- {ukey : 1}];
+ resetColls();
+ var inserts = [{ukey: 0}, {ukey: 0}, {ukey: 1}];
-assert.writeError(collSh.insert(inserts));
-assert.eq(1, collSh.find().itcount());
+ assert.writeError(collSh.insert(inserts));
+ assert.eq(1, collSh.find().itcount());
-assert.writeError(collUn.insert(inserts));
-assert.eq(1, collUn.find().itcount());
+ assert.writeError(collUn.insert(inserts));
+ assert.eq(1, collUn.find().itcount());
-assert.writeError(collDi.insert(inserts));
-assert.eq(1, collDi.find().itcount());
+ assert.writeError(collDi.insert(inserts));
+ assert.eq(1, collDi.find().itcount());
-jsTest.log("Bulk insert (no COE) with mongod and mongos error...");
+ jsTest.log("Bulk insert (no COE) with mongod and mongos error...");
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 0},
- {ukey : 1},
- {hello : "world"}];
+ resetColls();
+ var inserts = [{ukey: 0}, {ukey: 0}, {ukey: 1}, {hello: "world"}];
-var res = assert.writeError(collSh.insert(inserts));
-assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
-assert.eq(1, collSh.find().itcount());
+ var res = assert.writeError(collSh.insert(inserts));
+ assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
+ assert.eq(1, collSh.find().itcount());
-res = assert.writeError(collUn.insert(inserts));
-assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
-assert.eq(1, collUn.find().itcount());
+ res = assert.writeError(collUn.insert(inserts));
+ assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
+ assert.eq(1, collUn.find().itcount());
-res = assert.writeError(collDi.insert(inserts));
-assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
-assert.eq(1, collDi.find().itcount());
+ res = assert.writeError(collDi.insert(inserts));
+ assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
+ assert.eq(1, collDi.find().itcount());
-jsTest.log("Bulk insert (no COE) on second shard...");
+ jsTest.log("Bulk insert (no COE) on second shard...");
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : -1}];
+ resetColls();
+ var inserts = [{ukey: 0}, {ukey: -1}];
-assert.writeOK(collSh.insert(inserts));
-assert.eq(2, collSh.find().itcount());
+ assert.writeOK(collSh.insert(inserts));
+ assert.eq(2, collSh.find().itcount());
-assert.writeOK(collUn.insert(inserts));
-assert.eq(2, collUn.find().itcount());
+ assert.writeOK(collUn.insert(inserts));
+ assert.eq(2, collUn.find().itcount());
-assert.writeOK(collDi.insert(inserts));
-assert.eq(2, collDi.find().itcount());
+ assert.writeOK(collDi.insert(inserts));
+ assert.eq(2, collDi.find().itcount());
-jsTest.log("Bulk insert to second shard (no COE) with mongos error...");
+ jsTest.log("Bulk insert to second shard (no COE) with mongos error...");
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 1}, // switches shards
- {ukey : -1},
- {hello : "world"}];
+ resetColls();
+ var inserts = [
+ {ukey: 0},
+ {ukey: 1}, // switches shards
+ {ukey: -1},
+ {hello: "world"}
+ ];
-assert.writeError(collSh.insert(inserts));
-assert.eq(3, collSh.find().itcount());
+ assert.writeError(collSh.insert(inserts));
+ assert.eq(3, collSh.find().itcount());
-jsTest.log("Bulk insert to second shard (no COE) with mongod error...");
+ jsTest.log("Bulk insert to second shard (no COE) with mongod error...");
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 1},
- {ukey : -1},
- {ukey : -2},
- {ukey : -2}];
+ resetColls();
+ var inserts = [{ukey: 0}, {ukey: 1}, {ukey: -1}, {ukey: -2}, {ukey: -2}];
-assert.writeError(collSh.insert(inserts));
-assert.eq(4, collSh.find().itcount());
+ assert.writeError(collSh.insert(inserts));
+ assert.eq(4, collSh.find().itcount());
-assert.writeError(collUn.insert(inserts));
-assert.eq(4, collUn.find().itcount());
+ assert.writeError(collUn.insert(inserts));
+ assert.eq(4, collUn.find().itcount());
-assert.writeError(collDi.insert(inserts));
-assert.eq(4, collDi.find().itcount());
+ assert.writeError(collDi.insert(inserts));
+ assert.eq(4, collDi.find().itcount());
-jsTest.log("Bulk insert to third shard (no COE) with mongod and mongos error...");
+ jsTest.log("Bulk insert to third shard (no COE) with mongod and mongos error...");
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 1},
- {ukey : -2},
- {ukey : -3},
- {ukey : 4},
- {ukey : 4},
- {hello : "world"}];
+ resetColls();
+ var inserts =
+ [{ukey: 0}, {ukey: 1}, {ukey: -2}, {ukey: -3}, {ukey: 4}, {ukey: 4}, {hello: "world"}];
-res = assert.writeError(collSh.insert(inserts));
-assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
-assert.eq(5, collSh.find().itcount());
+ res = assert.writeError(collSh.insert(inserts));
+ assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
+ assert.eq(5, collSh.find().itcount());
-res = assert.writeError(collUn.insert(inserts));
-assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
-assert.eq(5, collUn.find().itcount());
+ res = assert.writeError(collUn.insert(inserts));
+ assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
+ assert.eq(5, collUn.find().itcount());
-res = assert.writeError(collDi.insert(inserts));
-assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
-assert.eq(5, collDi.find().itcount());
+ res = assert.writeError(collDi.insert(inserts));
+ assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
+ assert.eq(5, collDi.find().itcount());
-//
-// CONTINUE-ON-ERROR
-//
+ //
+ // CONTINUE-ON-ERROR
+ //
-jsTest.log("Bulk insert (yes COE) with mongos error...");
+ jsTest.log("Bulk insert (yes COE) with mongos error...");
-resetColls();
-var inserts = [{ukey : 0},
- {hello : "world"},
- {ukey : 1}];
+ resetColls();
+ var inserts = [{ukey: 0}, {hello: "world"}, {ukey: 1}];
-assert.writeError(collSh.insert(inserts, 1)); // COE
-assert.eq(2, collSh.find().itcount());
+ assert.writeError(collSh.insert(inserts, 1)); // COE
+ assert.eq(2, collSh.find().itcount());
-jsTest.log("Bulk insert (yes COE) with mongod error...");
-
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 0},
- {ukey : 1}];
+ jsTest.log("Bulk insert (yes COE) with mongod error...");
-assert.writeError(collSh.insert(inserts, 1));
-assert.eq(2, collSh.find().itcount());
+ resetColls();
+ var inserts = [{ukey: 0}, {ukey: 0}, {ukey: 1}];
-assert.writeError(collUn.insert(inserts, 1));
-assert.eq(2, collUn.find().itcount());
-
-assert.writeError(collDi.insert(inserts, 1));
-assert.eq(2, collDi.find().itcount());
-
-jsTest
- .log("Bulk insert to third shard (yes COE) with mongod and mongos error...");
-
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 1},
- {ukey : -2},
- {ukey : -3},
- {ukey : 4},
- {ukey : 4},
- {hello : "world"}];
-
-// Last error here is mongos error
-res = assert.writeError(collSh.insert(inserts, 1));
-assert(!isDupKeyError(res.getWriteErrorAt(res.getWriteErrorCount() - 1).errmsg), res.toString());
-assert.eq(5, collSh.find().itcount());
-
-// Extra insert goes through, since mongos error "doesn't count"
-res = assert.writeError(collUn.insert(inserts, 1));
-assert.eq(6, res.nInserted, res.toString());
-assert.eq(6, collUn.find().itcount());
-
-res = assert.writeError(collDi.insert(inserts, 1));
-assert.eq(6, res.nInserted, res.toString());
-assert.eq(6, collDi.find().itcount());
-
-jsTest.log("Bulk insert to third shard (yes COE) with mongod and mongos error "
- + "(mongos error first)...");
-
-resetColls();
-var inserts = [{ukey : 0},
- {ukey : 1},
- {ukey : -2},
- {ukey : -3},
- {hello : "world"},
- {ukey : 4},
- {ukey : 4}];
-
-// Last error here is mongos error
-res = assert.writeError(collSh.insert(inserts, 1));
-assert(isDupKeyError(res.getWriteErrorAt(res.getWriteErrorCount() - 1).errmsg), res.toString());
-assert.eq(5, collSh.find().itcount());
-
-// Extra insert goes through, since mongos error "doesn't count"
-res = assert.writeError(collUn.insert(inserts, 1));
-assert(isDupKeyError(res.getWriteErrorAt(res.getWriteErrorCount() - 1).errmsg), res.toString());
-assert.eq(6, collUn.find().itcount());
-
-res = assert.writeError(collDi.insert(inserts, 1));
-assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
-assert.eq(6, collDi.find().itcount());
-
-//
-// Test when WBL has to be invoked mid-insert
-//
-
-jsTest.log("Testing bulk insert (no COE) with WBL...");
-resetColls();
-
-var inserts = [{ukey : 1},
- {ukey : -1}];
-
-var staleCollSh = staleMongos.getCollection(collSh + "");
-assert.eq(null, staleCollSh.findOne(), 'Collections should be empty');
-
-assert.commandWorked(admin.runCommand({ moveChunk : collSh + "",
- find : {ukey : 0},
- to : shards[1]._id,
- _waitForDelete: true }));
-assert.commandWorked(admin.runCommand({ moveChunk : collSh + "",
- find : {ukey : 0},
- to : shards[0]._id,
- _waitForDelete: true}));
-
-assert.writeOK(staleCollSh.insert(inserts));
-
-//
-// Test when the objects to be bulk inserted are 10MB, and so can't be inserted
-// together with WBL.
-//
-
-jsTest.log("Testing bulk insert (no COE) with WBL and large objects...");
-resetColls();
-
-var data10MB = 'x'.repeat(10 * 1024 * 1024);
-var inserts = [{ukey : 1, data : data10MB},
- {ukey : 2, data : data10MB},
- {ukey : -1, data : data10MB},
- {ukey : -2, data : data10MB}];
-
-staleCollSh = staleMongos.getCollection(collSh + "");
-assert.eq(null, staleCollSh.findOne(), 'Collections should be empty');
-
-assert.commandWorked(admin.runCommand({ moveChunk : collSh + "",
- find : {ukey : 0},
- to : shards[1]._id,
- _waitForDelete: true }));
-assert.commandWorked(admin.runCommand({ moveChunk : collSh + "",
- find : {ukey : 0},
- to : shards[0]._id,
- _waitForDelete: true }));
-
-assert.writeOK(staleCollSh.insert(inserts));
-
-st.stop();
+ assert.writeError(collSh.insert(inserts, 1));
+ assert.eq(2, collSh.find().itcount());
+
+ assert.writeError(collUn.insert(inserts, 1));
+ assert.eq(2, collUn.find().itcount());
+
+ assert.writeError(collDi.insert(inserts, 1));
+ assert.eq(2, collDi.find().itcount());
+
+ jsTest.log("Bulk insert to third shard (yes COE) with mongod and mongos error...");
+
+ resetColls();
+ var inserts =
+ [{ukey: 0}, {ukey: 1}, {ukey: -2}, {ukey: -3}, {ukey: 4}, {ukey: 4}, {hello: "world"}];
+
+ // Last error here is mongos error
+ res = assert.writeError(collSh.insert(inserts, 1));
+ assert(!isDupKeyError(res.getWriteErrorAt(res.getWriteErrorCount() - 1).errmsg),
+ res.toString());
+ assert.eq(5, collSh.find().itcount());
+
+ // Extra insert goes through, since mongos error "doesn't count"
+ res = assert.writeError(collUn.insert(inserts, 1));
+ assert.eq(6, res.nInserted, res.toString());
+ assert.eq(6, collUn.find().itcount());
+
+ res = assert.writeError(collDi.insert(inserts, 1));
+ assert.eq(6, res.nInserted, res.toString());
+ assert.eq(6, collDi.find().itcount());
+
+ jsTest.log("Bulk insert to third shard (yes COE) with mongod and mongos error " +
+ "(mongos error first)...");
+
+ resetColls();
+ var inserts =
+ [{ukey: 0}, {ukey: 1}, {ukey: -2}, {ukey: -3}, {hello: "world"}, {ukey: 4}, {ukey: 4}];
+
+ // Last error here is mongos error
+ res = assert.writeError(collSh.insert(inserts, 1));
+ assert(isDupKeyError(res.getWriteErrorAt(res.getWriteErrorCount() - 1).errmsg), res.toString());
+ assert.eq(5, collSh.find().itcount());
+
+ // Extra insert goes through, since mongos error "doesn't count"
+ res = assert.writeError(collUn.insert(inserts, 1));
+ assert(isDupKeyError(res.getWriteErrorAt(res.getWriteErrorCount() - 1).errmsg), res.toString());
+ assert.eq(6, collUn.find().itcount());
+
+ res = assert.writeError(collDi.insert(inserts, 1));
+ assert(isDupKeyError(res.getWriteErrorAt(0).errmsg), res.toString());
+ assert.eq(6, collDi.find().itcount());
+
+ //
+ // Test when WBL has to be invoked mid-insert
+ //
+
+ jsTest.log("Testing bulk insert (no COE) with WBL...");
+ resetColls();
+
+ var inserts = [{ukey: 1}, {ukey: -1}];
+
+ var staleCollSh = staleMongos.getCollection(collSh + "");
+ assert.eq(null, staleCollSh.findOne(), 'Collections should be empty');
+
+ assert.commandWorked(admin.runCommand(
+ {moveChunk: collSh + "", find: {ukey: 0}, to: shards[1]._id, _waitForDelete: true}));
+ assert.commandWorked(admin.runCommand(
+ {moveChunk: collSh + "", find: {ukey: 0}, to: shards[0]._id, _waitForDelete: true}));
+
+ assert.writeOK(staleCollSh.insert(inserts));
+
+ //
+ // Test when the objects to be bulk inserted are 10MB, and so can't be inserted
+ // together with WBL.
+ //
+
+ jsTest.log("Testing bulk insert (no COE) with WBL and large objects...");
+ resetColls();
+
+ var data10MB = 'x'.repeat(10 * 1024 * 1024);
+ var inserts = [
+ {ukey: 1, data: data10MB},
+ {ukey: 2, data: data10MB},
+ {ukey: -1, data: data10MB},
+ {ukey: -2, data: data10MB}
+ ];
+
+ staleCollSh = staleMongos.getCollection(collSh + "");
+ assert.eq(null, staleCollSh.findOne(), 'Collections should be empty');
+
+ assert.commandWorked(admin.runCommand(
+ {moveChunk: collSh + "", find: {ukey: 0}, to: shards[1]._id, _waitForDelete: true}));
+ assert.commandWorked(admin.runCommand(
+ {moveChunk: collSh + "", find: {ukey: 0}, to: shards[0]._id, _waitForDelete: true}));
+
+ assert.writeOK(staleCollSh.insert(inserts));
+
+ st.stop();
})();