diff options
Diffstat (limited to 'jstests/slow2/conc_update.js')
-rw-r--r-- | jstests/slow2/conc_update.js | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/jstests/slow2/conc_update.js b/jstests/slow2/conc_update.js index 4ee5bd22ca7..0d778df047e 100644 --- a/jstests/slow2/conc_update.js +++ b/jstests/slow2/conc_update.js @@ -6,42 +6,46 @@ db.dropDatabase(); NRECORDS=3*1024*1024 print("loading "+NRECORDS+" documents (progress msg every 1024*1024 documents)") -var bulk = db.conc.initializeUnorderedBulkOp(); -for (var i = 0; i < NRECORDS; i++) { - bulk.insert({ x: i }); +for (i=0; i<(NRECORDS); i++) { + db.conc.insert({x:i}) + if ((i%(1024*1024))==0) + print("loaded " + i/(1024*1024) + " mibi-records") } -assert.writeOK(bulk.execute()); print("making an index (this will take a while)") db.conc.ensureIndex({x:1}) var c1=db.conc.count({x:{$lt:NRECORDS}}) -updater = startParallelShell("db = db.getSisterDB('concurrency');\ - db.concflag.insert({ inprog: true });\ - sleep(20);\ - assert.writeOK(db.conc.update({}, \ - { $inc: { x: " + NRECORDS + "}}, false, true)); \ - assert.writeOK(db.concflag.update({}, { inprog: false }));"); +updater=startParallelShell("db=db.getSisterDB('concurrency');\ + db.concflag.insert( {inprog:true} );\ + sleep(20);\ + db.conc.update({}, {$inc:{x: "+NRECORDS+"}}, false, true);\ + e=db.getLastError();\ + print('update error: '+ e);\ + db.concflag.update({},{inprog:false});\ + assert.eq(e, null, 'update failed');"); -assert.soon( function(){ var x = db.concflag.findOne(); return x && x.inprog; } , +assert.soon( function(){ var x = db.concflag.findOne(); return x && x.inprog; } , "wait for fork" , 30000 , 1 ); querycount=0; decrements=0; misses=0 -assert.soon(function(){ - c2=db.conc.count({x:{$lt:NRECORDS}}) - print(c2) - querycount++; - if (c2<c1) - decrements++; - else - misses++; - c1 = c2; - return ! db.concflag.findOne().inprog; -}, "update never finished" , 2 * 60 * 60 * 1000 , 10 ); +assert.soon( + function(){ + c2=db.conc.count({x:{$lt:NRECORDS}}) + print(c2) + querycount++; + if (c2<c1) + decrements++; + else + misses++; + c1 = c2; + return ! db.concflag.findOne().inprog; + } , + "update never finished" , 2 * 60 * 60 * 1000 , 10 ); print(querycount + " queries, " + decrements + " decrements, " + misses + " misses"); |