Files
mongo/jstests/core/queryoptimizer3.js
Max Hirschhorn 9ad8d6335f SERVER-40076 Tag JS tests with reason they're unable to run in Atlas.
There are likely more JavaScript tests which have been added since
r3.6.9 that still need to be tagged.

(cherry picked from commit 05ec08fa62)
2019-03-11 18:17:29 -04:00

70 lines
2.4 KiB
JavaScript

// Validates cases where index scans are aborted due to the collection being dropped (SERVER-4400)
//
// Drop and other sharding commands can conflict with LockBusy errors in a sharding passthrough
// suite. This is because drop against a mongos takes distlocks, whereas drop against a mongod does
// not. Due to the huge number of parallel drops in this test, the other thead is very likely to be
// starved frequently.
// Note: this tag can be safely removed once PM-697 is complete and replaces distlocks with a
// LockManager that has a fairness policy, which distlocks lack.
// @tags: [
// assumes_against_mongod_not_mongos,
// requires_non_retryable_writes,
// uses_multiple_connections,
// ]
(function() {
'use strict';
var coll = db.jstests_queryoptimizer3;
var shellWaitHandle = startParallelShell(function() {
for (var i = 0; i < 400; ++i) {
sleep(50);
try {
db.jstests_queryoptimizer3.drop();
} catch (e) {
if (e.code === ErrorCodes.BackgroundOperationInProgressForNamespace) {
print("Background operation temporarily in progress while attempting to drop " +
"collection.");
continue;
}
throw e;
}
}
});
for (var i = 0; i < 100; ++i) {
coll.drop();
assert.commandWorked(coll.ensureIndex({a: 1}));
assert.commandWorked(coll.ensureIndex({b: 1}));
var bulk = coll.initializeUnorderedBulkOp();
for (var j = 0; j < 100; ++j) {
bulk.insert({a: j, b: j});
}
assert.commandWorked(bulk.execute());
try {
var m = i % 5;
if (m == 0) {
coll.count({a: {$gte: 0}, b: {$gte: 0}});
} else if (m == 1) {
coll.find({a: {$gte: 0}, b: {$gte: 0}}).itcount();
} else if (m == 2) {
coll.remove({a: {$gte: 0}, b: {$gte: 0}});
} else if (m == 3) {
coll.update({a: {$gte: 0}, b: {$gte: 0}}, {});
} else if (m == 4) {
coll.distinct('x', {a: {$gte: 0}, b: {$gte: 0}});
}
} catch (e) {
print("Op killed during yield: " + e.message);
}
}
shellWaitHandle();
// Ensure that the server is still responding
assert.commandWorked(db.runCommand({isMaster: 1}));
})();