summaryrefslogtreecommitdiff
path: root/jstests/core/notablescan.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/notablescan.js')
-rw-r--r--jstests/core/notablescan.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/jstests/core/notablescan.js b/jstests/core/notablescan.js
new file mode 100644
index 00000000000..baef5d56ae6
--- /dev/null
+++ b/jstests/core/notablescan.js
@@ -0,0 +1,61 @@
+// check notablescan mode
+//
+// @tags: [
+// assumes_against_mongod_not_mongos,
+// # This test attempts to perform read operations after having enabled the notablescan server
+// # parameter. The former operations may be routed to a secondary in the replica set, whereas the
+// # latter must be routed to the primary.
+// assumes_read_preference_unchanged,
+// assumes_superuser_permissions,
+// does_not_support_stepdowns,
+// # Server parameters are stored in-memory only so are not transferred onto the recipient. This
+// # test sets the server parameter "notablescan" to force the node to not execute queries that
+// # require a collection scan and return an error.
+// tenant_migration_incompatible,
+// ]
+
+t = db.test_notablescan;
+t.drop();
+
+try {
+ assert.commandWorked(db._adminCommand({setParameter: 1, notablescan: true}));
+ // commented lines are SERVER-2222
+ if (0) { // SERVER-2222
+ assert.throws(function() {
+ t.find({a: 1}).toArray();
+ });
+ }
+ t.save({a: 1});
+ assert.throws(function() {
+ t.count({a: 1});
+ });
+ if (0) {
+ assert.throws(function() {
+ t.find({}).toArray();
+ });
+ }
+ assert.eq(1, t.find({}).itcount()); // SERVER-274
+
+ let err = assert.throws(function() {
+ t.find({a: 1}).toArray();
+ });
+ assert.includes(err.toString(), "No indexed plans available, and running with 'notablescan'");
+
+ err = assert.throws(function() {
+ t.find({a: 1}).hint({$natural: 1}).toArray();
+ });
+ assert.includes(err.toString(),
+ "hint $natural is not allowed, because 'notablescan' is enabled");
+
+ t.createIndex({a: 1});
+ assert.eq(0, t.find({a: 1, b: 1}).itcount());
+ assert.eq(1, t.find({a: 1, b: null}).itcount());
+
+ // SERVER-4327
+ assert.eq(0, t.find({a: {$in: []}}).itcount());
+ assert.eq(0, t.find({a: {$in: []}, b: 0}).itcount());
+} finally {
+ // We assume notablescan was false before this test started and restore that
+ // expected value.
+ assert.commandWorked(db._adminCommand({setParameter: 1, notablescan: false}));
+}