summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorAaron <aaron@10gen.com>2011-12-23 14:30:11 -0800
committerAaron <aaron@10gen.com>2011-12-24 11:30:54 -0800
commit2d5c1aeeb470df3e79b1400a5410b73676d73c97 (patch)
treeb46f480b86f605b609ecc969881809ae77323d18 /jstests
parentb8447afd0e907e9d9df7f94a98dbbe159fcf9df6 (diff)
downloadmongo-2d5c1aeeb470df3e79b1400a5410b73676d73c97.tar.gz
SERVER-4401 attempt to advance to next or clause if a cursor becomes invalid on yield recovery
Diffstat (limited to 'jstests')
-rw-r--r--jstests/distinct3.js27
1 files changed, 27 insertions, 0 deletions
diff --git a/jstests/distinct3.js b/jstests/distinct3.js
new file mode 100644
index 00000000000..f945ec9d7e8
--- /dev/null
+++ b/jstests/distinct3.js
@@ -0,0 +1,27 @@
+// Yield and delete test case for query optimizer cursor.
+
+t = db.jstests_distinct3;
+t.drop();
+
+t.ensureIndex({a:1});
+t.ensureIndex({b:1});
+
+for( i = 0; i < 50; ++i ) {
+ for( j = 0; j < 20; ++j ) {
+ t.save({a:i,c:i,d:j});
+ }
+}
+for( i = 0; i < 1000; ++i ) {
+ t.save({b:i,c:i+50});
+}
+db.getLastError();
+
+// The idea here is to try and remove the last match for the {a:1} index scan while distinct is yielding.
+p = startParallelShell( 'for( i = 0; i < 2500; ++i ) { db.jstests_distinct3.remove({a:49}); for( j = 0; j < 20; ++j ) { db.jstests_distinct3.save({a:49,c:49,d:j}) } }' );
+
+for( i = 0; i < 100; ++i ) {
+ count = t.distinct( 'c', {$or:[{a:{$gte:0},d:0},{b:{$gte:0}}]} ).length;
+ assert.gt( count, 1000 );
+}
+
+p();