blob: 46b055209db38825d7c5b1153b1a14605fa35e8b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/**
* Ensures that the 'collMod' command takes a Collection MODE_X lock during a no-op.
*/
(function() {
'use strict';
// Note: failpoint name may not be changed due to backwards compatibility problem in
// multiversion suites running JS tests using the failpoint.
// In reality this hangs after acquiring a collection MODE_X lock (w/ database MODE_IX)."
const failpoint = 'hangAfterDatabaseLock';
assert.commandWorked(db.adminCommand({configureFailPoint: failpoint, mode: "alwaysOn"}));
const conn = db.getMongo();
assert.commandWorked(db.createCollection('foo'));
// Run a no-op collMod command.
const awaitParallelShell = startParallelShell(() => {
assert.commandWorked(db.runCommand({collMod: 'foo'}));
}, conn.port);
// Check that the Collection MODE_X lock is being held by checking in lockInfo.
assert.soon(() => {
let lockInfo = assert.commandWorked(db.adminCommand({lockInfo: 1})).lockInfo;
for (let i = 0; i < lockInfo.length; i++) {
let resourceId = lockInfo[i].resourceId;
const mode = lockInfo[i].granted[0].mode;
if (resourceId.includes("Collection") && resourceId.includes("test.foo") && mode === "X") {
return true;
}
}
return false;
});
assert.commandWorked(db.adminCommand({configureFailPoint: failpoint, mode: "off"}));
awaitParallelShell();
})();
|