mongo/jstests/libs/unique_indexes/check_unique_indexes.js

47 lines
2.0 KiB
JavaScript

// Contains helper for checking format version of unique indexes.
/**
* Verifies that all unique indexes belonging to all collections on all databases on the server
* are in correct data format version.
*/
export function checkUniqueIndexFormatVersion(adminDB) {
// Data format version is WiredTiger specific and not required to be tested for other
// storage engines.
const isWiredTiger = assert.commandWorked(adminDB.serverStatus()).storageEngine.name === "wiredTiger";
if (!isWiredTiger) return;
let res = assert.commandWorked(adminDB.runCommand({"listDatabases": 1}));
let databaseList = res.databases;
databaseList.forEach(function (database) {
let currentDatabase = adminDB.getSiblingDB(database.name);
// Get the list of collections including collections that are pending drop. This is to
// ensure that every unique index has the correct format version.
let collections = currentDatabase.runCommand("listCollections").cursor.firstBatch;
collections.forEach(function (c) {
if (c.type == "view") {
return;
}
let currentCollection = currentDatabase.getCollection(c.name);
currentCollection.getIndexes().forEach(function (index) {
if (index.unique && !index.clustered) {
let ifv = currentCollection.aggregate({$collStats: {storageStats: {}}}).next().storageStats
.indexDetails[index.name].metadata.formatVersion;
if (index.v === 2) {
assert(
ifv == 12 || ifv == 14,
"Expected index format version 12 or 14 for unique index: " + tojson(index),
);
} else {
assert(
ifv == 11 || ifv == 13,
"Expected index format version 11 or 13 for unique index: " + tojson(index),
);
}
}
});
});
});
}