diff options
author | Scott Hernandez <scotthernandez@gmail.com> | 2014-09-29 08:25:36 -0400 |
---|---|---|
committer | Scott Hernandez <scotthernandez@gmail.com> | 2014-09-29 14:55:05 -0400 |
commit | e5de9146a0bcdd160661766cb168cb7530759444 (patch) | |
tree | f724e1779aabbc96d2f45056c853e67df760aeca | |
parent | 243f11cd82d7925c77df0b04fad58b18f70cf031 (diff) | |
download | mongo-e5de9146a0bcdd160661766cb168cb7530759444.tar.gz |
backport resync_with_write_load js test
-rw-r--r-- | jstests/replsets/resync_with_write_load.js | 36 | ||||
-rw-r--r-- | src/mongo/shell/servers_misc.js | 11 |
2 files changed, 40 insertions, 7 deletions
diff --git a/jstests/replsets/resync_with_write_load.js b/jstests/replsets/resync_with_write_load.js index aaf53c91dd8..9fe82b62fb7 100644 --- a/jstests/replsets/resync_with_write_load.js +++ b/jstests/replsets/resync_with_write_load.js @@ -5,14 +5,16 @@ * We cannot test each phase of the initial sync directly but by providing constant writes we can * assume that each individual phase will have data to work with, and therefore tested. */ -var replTest = new ReplSetTest({name: 'resync', nodes: 2, oplogSize: 100}); +var testName = "resync_with_write_load" +var replTest = new ReplSetTest({name: testName, nodes: 3, oplogSize: 100}); var nodes = replTest.nodeList(); var conns = replTest.startSet(); -var config = { "_id": "resync", +var config = { "_id": testName, "members": [ {"_id": 0, "host": nodes[0], priority:4}, - {"_id": 1, "host": nodes[1]}] + {"_id": 1, "host": nodes[1]}, + {"_id": 2, "host": nodes[2]}] }; var r = replTest.initiate(config); @@ -34,20 +36,40 @@ assert.writeOK( A.foo.insert({ x: 1 }, { writeConcern: { w: 1, wtimeout: 60000 } replTest.stop(BID); print("******************** starting load for 30 secs *********************"); -var work = 'var start=new Date().getTime(); db.timeToStartTrigger.insert({_id:1}); while(true) {for(x=0;x<1000;x++) {db["a" + x].insert({a:x})};sleep(1); if((new Date().getTime() - start) > 30000) break; }'; +var work = function() { + print("starting loadgen"); + var start=new Date().getTime(); + + assert.writeOK(db.timeToStartTrigger.insert({_id:1})); + while (true) { + for (x=0; x < 100; x++) { + db["a" + x].insert({a:x}); + }; + + var runTime = (new Date().getTime() - start); + if (runTime > 30000) + break; + else if (runTime < 5000) // back-off more during first 2 seconds + sleep(50); + else + sleep(1); + + }; + print("finshing loadgen"); + }; //insert enough that resync node has to go through oplog replay in each step -var loadGen = startParallelShell( work, replTest.ports[0] ); +var loadGen = startParallelShell(work, replTest.ports[0]); // wait for document to appear to continue assert.soon(function() { try { - return 1 == a_conn.getDB("test")["timeToStartTrigger"].count(); + return 1 == master.getDB("test")["timeToStartTrigger"].count(); } catch ( e ) { print( e ); return false; } -}, "waited too long for start trigger"); +}, "waited too long for start trigger", 90 * 1000 /* 90 secs */ ); print("*************** STARTING node without data ***************"); replTest.start(BID); diff --git a/src/mongo/shell/servers_misc.js b/src/mongo/shell/servers_misc.js index 91db127998a..52a2f3a9381 100644 --- a/src/mongo/shell/servers_misc.js +++ b/src/mongo/shell/servers_misc.js @@ -290,6 +290,17 @@ function startParallelShell( jsCode, port, noConnect ){ var args = ["mongo"]; + // Convert function into call-string + if (typeof(jsCode) == "function") { + var id = Math.floor(Math.random() * 100000); + jsCode = "var f" + id + " = " + jsCode.toString() + ";f" + id + "();"; + } + else if(typeof(jsCode) == "string") {} + // do nothing + else { + throw Error("bad first argument to startParallelShell"); + } + if (noConnect) { args.push("--nodb"); } else if (typeof(db) == "object") { |