Files
mongo/jstests/core/currentop.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

57 lines
1.9 KiB
JavaScript

/**
* Tests that long-running operations show up in currentOp and report the locks they are holding.
*
* @tags: [
* assumes_superuser_permissions,
* # fsync command is not available on embedded
* incompatible_with_embedded,
* ]
*/
(function() {
"use strict";
const coll = db.jstests_currentop;
coll.drop();
// We fsync+lock the server to cause all subsequent write operations to block.
assert.commandWorked(db.fsyncLock());
const awaitInsertShell = startParallelShell(function() {
assert.writeOK(db.jstests_currentop.insert({}));
});
// Wait until the write appears in the currentOp output reporting that it is waiting for a lock.
assert.soon(
function() {
var lock_type = "";
if (jsTest.options().storageEngine === "mobile") {
lock_type = "W";
} else {
lock_type = "w";
}
const ops = db.currentOp({
$and: [
{"locks.Global": lock_type, waitingForLock: true},
// Depending on whether CurOp::setNS_inlock() has been called, the "ns" field
// may either be the full collection name or the command namespace.
{
$or: [
{ns: coll.getFullName()},
{ns: db.$cmd.getFullName(), "command.insert": coll.getName()}
]
},
{type: "op"}
]
});
return ops.inprog.length === 1;
},
function() {
return "Failed to find blocked insert in currentOp() output: " + tojson(db.currentOp());
});
// Unlock the server and make sure the write finishes.
const fsyncResponse = assert.commandWorked(db.fsyncUnlock());
assert.eq(fsyncResponse.lockCount, 0);
awaitInsertShell();
}());