43 lines
No EOL
1 KiB
JavaScript
43 lines
No EOL
1 KiB
JavaScript
// Test yielding group command SERVER-1395
|
|
|
|
t = db.jstests_group7;
|
|
t.drop();
|
|
|
|
function checkForYield( docs, updates ) {
|
|
t.drop();
|
|
a = 0;
|
|
for( var i = 0; i < docs; ++i ) {
|
|
t.save( {a:a} );
|
|
}
|
|
db.getLastError();
|
|
|
|
// Iteratively update all a values atomically.
|
|
p = startParallelShell( 'for( a = 0; a < ' + updates + '; ++a ) { db.jstests_group7.update( {$atomic:true}, {$set:{a:a}}, false, true ); db.getLastError(); }' );
|
|
|
|
for( var i = 0; i < updates; ++i ) {
|
|
ret = t.group({key:{a:1},reduce:function(){},initial:{}});
|
|
// Check if group sees more than one a value, indicating that it yielded.
|
|
if ( ret.length > 1 ) {
|
|
p();
|
|
return true;
|
|
}
|
|
printjson( ret );
|
|
}
|
|
|
|
p();
|
|
return false;
|
|
}
|
|
|
|
var yielded = false;
|
|
var docs = 1500;
|
|
var updates = 50;
|
|
for( var j = 1; j <= 6; ++j ) {
|
|
if ( checkForYield( docs, updates ) ) {
|
|
yielded = true;
|
|
break;
|
|
}
|
|
// Increase docs and updates to encourage yielding.
|
|
docs *= 2;
|
|
updates *= 2;
|
|
}
|
|
assert( yielded ); |