mirror of
https://github.com/mongodb/mongo.git
synced 2024-12-01 09:32:32 +01:00
62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
//
|
|
// Run 'find' by UUID while renaming a collection concurrently. See SERVER-34615.
|
|
//
|
|
|
|
(function() {
|
|
"use strict";
|
|
const dbName = "do_concurrent_rename";
|
|
const collName = "collA";
|
|
const otherName = "collB";
|
|
const repeatFind = 100;
|
|
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 findRenameDB = conn.getDB(dbName);
|
|
findRenameDB.dropDatabase();
|
|
assert.commandWorked(findRenameDB.runCommand({"create": collName}));
|
|
assert.commandWorked(findRenameDB.runCommand({insert: collName, documents: [{fooField: 'FOO'}]}));
|
|
|
|
let infos = findRenameDB.getCollectionInfos();
|
|
let uuid = infos[0].info.uuid;
|
|
const findCmd = {
|
|
"find": uuid
|
|
};
|
|
|
|
// Assert 'find' command by UUID works.
|
|
assert.commandWorked(findRenameDB.runCommand(findCmd));
|
|
|
|
jsTestLog("Start parallel shell for renames.");
|
|
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,
|
|
"Expected parallel shell to insert a document.");
|
|
|
|
jsTestLog("Start 'find' commands.");
|
|
while (conn.getDB("test").await_data.findOne({_id: "rename has ended"}) == null) {
|
|
for (let i = 0; i < repeatFind; i++) {
|
|
let res = findRenameDB.runCommand(findCmd);
|
|
|
|
// This is an acceptable transient error until SERVER-31695 has been completed.
|
|
if (res.code === ErrorCodes.QueryPlanKilled) {
|
|
print("Ignoring transient QueryPlanKilled error: " + res.errmsg);
|
|
continue;
|
|
}
|
|
assert.commandWorked(res, "could not run " + tojson(findCmd));
|
|
let cursor = new DBCommandCursor(findRenameDB, res);
|
|
let errMsg =
|
|
"expected more data from command " + tojson(findCmd) + ", with result " + tojson(res);
|
|
assert(cursor.hasNext(), errMsg);
|
|
let doc = cursor.next();
|
|
assert.eq(doc.fooField, "FOO");
|
|
assert(!cursor.hasNext(), "expected to have exhausted cursor for results " + tojson(res));
|
|
}
|
|
}
|
|
renameShell();
|
|
MongoRunner.stopMongod(conn);
|
|
}());
|