summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorJason Rassi <rassi@10gen.com>2014-08-20 22:16:00 -0400
committerJason Rassi <rassi@10gen.com>2014-08-24 21:11:16 -0400
commit08883b2312a524722d37dc28ce91c6abf801bb2e (patch)
treea6e8fc3f5acb85f7c66754ca1ec8d3cae22b0fa3 /jstests
parent06e03e2201b0b2a46a277e52a674fd5d6f861c9e (diff)
downloadmongo-08883b2312a524722d37dc28ce91c6abf801bb2e.tar.gz
SERVER-14969 CollectionCursorCache::invalidateAll() kill agg exec
(cherry picked from commit 71e2312d2ad6d418ea223d6e003a065122c926d8)
Diffstat (limited to 'jstests')
-rw-r--r--jstests/aggregation/bugs/server14969.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/jstests/aggregation/bugs/server14969.js b/jstests/aggregation/bugs/server14969.js
new file mode 100644
index 00000000000..4d169586d11
--- /dev/null
+++ b/jstests/aggregation/bugs/server14969.js
@@ -0,0 +1,32 @@
+// Test dropping an index that is being used by an agg pipeline.
+var coll = db.server14969;
+var docsPerBatch = 3;
+coll.drop();
+
+// Initialize collection with eight 1M documents, and index on field "a".
+var longString = new Array(1024*1024).join('x');
+for (var i = 0; i < 100; ++i) {
+ assert.writeOK(coll.insert({a: 1, bigField: longString}));
+}
+assert.commandWorked(coll.ensureIndex({a: 1}));
+
+// Create pipeline that uses index "a", with a small initial batch size.
+var cursor = coll.aggregate([{$match: {a: 1}}], {cursor: {batchSize: docsPerBatch}});
+for (var i = 0; i < docsPerBatch; ++i) {
+ assert(cursor.hasNext());
+ assert.eq(1, cursor.next().a);
+}
+
+// Drop index "a".
+assert.commandWorked(coll.dropIndex({a:1}));
+
+// Issue a getmore against agg cursor. Note that it is not defined whether the server continues to
+// generate further results for the cursor.
+try {
+ cursor.hasNext();
+ cursor.next();
+}
+catch (e) {}
+
+// Verify that the server hasn't crashed.
+assert.commandWorked(db.adminCommand({ping: 1}));