diff options
Diffstat (limited to 'jstests/noPassthrough/query_yield1.js')
-rw-r--r-- | jstests/noPassthrough/query_yield1.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/jstests/noPassthrough/query_yield1.js b/jstests/noPassthrough/query_yield1.js new file mode 100644 index 00000000000..624215f8c45 --- /dev/null +++ b/jstests/noPassthrough/query_yield1.js @@ -0,0 +1,87 @@ +if (0) { // Test disabled until SERVER-8579 is finished. Reminder ticket: SERVER-8342 + +load( "jstests/libs/slow_weekly_util.js" ) +testServer = new SlowWeeklyMongod( "query_yield1" ) +db = testServer.getDB( "test" ); + +t = db.query_yield1; +t.drop() + +N = 20000; +i = 0; + +q = function(){ var x=this.n; for ( var i=0; i<250; i++ ){ x = x * 2; } return false; } + +while ( true ){ + function fill(){ + for ( ; i<N; i++ ){ + t.insert( { _id : i , n : 1 } ) + } + } + + function timeQuery(){ + return Date.timeFunc( + function(){ + assert.eq( 0 , t.find( q ).itcount() ); + } + ); + + } + + fill(); + timeQuery(); + timeQuery(); + time = timeQuery(); + print( N + "\t" + time ); + if ( time > 2000 ) + break; + + N *= 2; +} + +// --- test 1 + +assert.eq( 0, db.currentOp().inprog.length , "setup broken" ); + +join = startParallelShell( "print( 0 == db.query_yield1.find( function(){ var x=this.n; for ( var i=0; i<500; i++ ){ x = x * 2; } return false; } ).itcount() ); " ) + +assert.soon( + function(){ + var x = db.currentOp().inprog; + return x.length > 0; + } , "never doing query" , 2000 , 1 +); + +print( "start query" ); + +num = 0; +start = new Date(); +biggestMe = 0; +while ( ( (new Date()).getTime() - start ) < ( time * 2 ) ){ + var me = Date.timeFunc( function(){ t.insert( { x : 1 } ); db.getLastError(); } ) + var x = db.currentOp() + + if ( num++ == 0 ){ + assert.eq( 1 , x.inprog.length , "nothing in prog" ); + } + + if ( me > biggestMe ) { + biggestMe = me; + print( "biggestMe: " + biggestMe ); + } + + assert.gt( 200 , me , "took too long for me to run" ); + + if ( x.inprog.length == 0 ) + break; + +} + +join(); + +var x = db.currentOp() +assert.eq( 0 , x.inprog.length , "weird 2" ); + +testServer.stop(); + +}
\ No newline at end of file |