summaryrefslogtreecommitdiff
path: root/jstests/noPassthroughWithMongod/create_existing_indexes_no_conflict.js
blob: 09a90d2d1a0334b3450640b8fb4fee0a0a699a59 (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
38
39
40
41
42
(function() {
"use strict";
load("jstests/libs/parallel_shell_helpers.js");
load("jstests/libs/wait_for_command.js");
const dbName = "test";
const collName = "ensure_index_no_conflicts";
const testDB = db.getSiblingDB(dbName);
testDB.dropDatabase();
assert.commandWorked(testDB.createCollection(collName));
const testColl = testDB.getCollection(collName);
assert.commandWorked(testColl.createIndex({a: 1}));

let sleepFunction = function(myDbName, myCollName) {
    // If createIndexes calls do need to wait on this lock, holding this lock for 4 hours will
    // trigger a test timeout.
    assert.commandFailedWithCode(db.getSiblingDB("test").adminCommand({
        sleep: 1,
        secs: 18000,
        lockTarget: myDbName + "." + myCollName,
        lock: "iw",
        $comment: "Lock sleep"
    }),
                                 ErrorCodes.Interrupted);
};

let sleepCommand =
    startParallelShell(funWithArgs(sleepFunction, dbName, collName), testDB.getMongo().port);

const sleepID =
    waitForCommand("sleepCmd",
                   op => (op["ns"] == "admin.$cmd" && op["command"]["$comment"] == "Lock sleep"),
                   testDB.getSiblingDB("admin"));

assert.commandWorked(testColl.createIndex({a: 1}));
assert.commandFailedWithCode(testColl.createIndex({a: -1}, {name: "a_1"}),
                             ErrorCodes.IndexKeySpecsConflict);

// Interrupt the sleep command.
assert.commandWorked(testDB.getSiblingDB("admin").killOp(sleepID));

sleepCommand();
})();