1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
// 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 );
|