summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/list_databases_and_rename_collection.js
blob: d5504d2582d1c84223e00d17e9b02d8d75fc4b78 (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//
// Run 'listDatabases' while renaming a collection concurrently. See SERVER-34531.
//

(function() {
"use strict";
const dbName = "do_concurrent_rename";
const collName = "collA";
const otherName = "collB";
const repeatListDatabases = 20;
const listDatabasesCmd = {
    "listDatabases": 1
};
load("jstests/noPassthrough/libs/concurrent_rename.js");
load("jstests/libs/parallel_shell_helpers.js");

const conn = MongoRunner.runMongod({});
assert.neq(null, conn, "mongod was unable to start up");
jsTestLog("Create collection.");
let listRenameDB = conn.getDB(dbName);
listRenameDB.dropDatabase();
assert.commandWorked(listRenameDB.runCommand({"create": collName}));

let testDB = conn.getDB("test");
testDB.dropDatabase();

jsTestLog("Verify database exists.");
let cmdRes = listRenameDB.adminCommand(listDatabasesCmd);
assert.commandWorked(cmdRes, "expected " + tojson(listDatabasesCmd) + " to be successful.");
assert(cmdRes.hasOwnProperty("databases"),
       "expected " + tojson(cmdRes) + " to have a databases property.");
assert(cmdRes.databases.map(d => d.name).includes(dbName),
       "expected " + tojson(cmdRes) + " to include " + dbName);

jsTestLog("Start parallel shell");
let renameShell =
    startParallelShell(funWithArgs(doRenames, dbName, collName, otherName), conn.port);

// Wait until we receive confirmation that the parallel shell has started.
assert.soon(() => conn.getDB("test").await_data.findOne({_id: "signal parent shell"}) !== null);

jsTestLog("Start listDatabases.");
while (conn.getDB("test").await_data.findOne({_id: "rename has ended"}) == null) {
    for (let i = 0; i < repeatListDatabases; i++) {
        cmdRes = listRenameDB.adminCommand(listDatabasesCmd);
        assert.commandWorked(cmdRes, "expected " + tojson(listDatabasesCmd) + " to be successful.");
        // Database should always exist.
        assert(cmdRes.hasOwnProperty("databases"),
               "expected " + tojson(cmdRes) + " to have a databases property.");
        assert(cmdRes.databases.map(d => d.name).includes(dbName),
               "expected " + tojson(cmdRes) + " to include " + dbName);
    }
}

jsTestLog("Finished running listDatabases.");

renameShell();
MongoRunner.stopMongod(conn);
}());