53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
load( "jstests/libs/slow_weekly_util.js" )
|
|
test = new SlowWeeklyMongod( "conc_update" )
|
|
db = test.getDB("concurrency")
|
|
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 });
|
|
}
|
|
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 }));");
|
|
|
|
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 );
|
|
|
|
print(querycount + " queries, " + decrements + " decrements, " + misses + " misses");
|
|
|
|
assert.eq( NRECORDS , db.conc.count() , "AT END 1" )
|
|
|
|
updater() // wait()
|
|
|
|
test.stop();
|