// Check proper covered index handling when query and processGetMore yield. // SERVER-4975 if (0) { // SERVER-4975 t = db.jstests_coveredIndex3; t2 = db.jstests_coveredIndex3_other; t.drop(); t2.drop(); function doTest(batchSize) { // Insert an array, which will make the { a:1 } index multikey and should disable covered // index // matching. p1 = startParallelShell( 'for( i = 0; i < 60; ++i ) { \ db.jstests_coveredIndex3.save( { a:[ 2000, 2001 ] } ); \ sleep( 300 ); \ }'); // Frequent writes cause the find operation to yield. p2 = startParallelShell( 'for( i = 0; i < 1800; ++i ) { \ db.jstests_coveredIndex3_other.save( {} ); \ sleep( 10 ); \ }'); for (i = 0; i < 30; ++i) { t.drop(); t.ensureIndex({a: 1}); for (j = 0; j < 1000; ++j) { t.save({a: j}); } c = t.find({}, {_id: 0, a: 1}).hint({a: 1}).batchSize(batchSize); while (c.hasNext()) { o = c.next(); // If o contains a high numeric 'a' value, it must come from an array saved in p1. assert(!(o.a > 1500), 'improper object returned ' + tojson(o)); } } p1(); p2(); } doTest(2000); // Test query. doTest( 500); // Try to test getMore - not clear if this will actually trigger the getMore issue. }