Files
mongo/jstests/replsets/dbcheck/dbcheck_old_format_missing_keys.js
Zac 591928c619 SERVER-108478 JS formatted by prettier and remove clang-format (#39656)
GitOrigin-RevId: 6c8f6aded47f260aa4f7c231b17dae3302cb1e04
2025-08-21 17:27:09 +00:00

51 lines
2.0 KiB
JavaScript

/**
* Tests dbCheck with old format index keys that have been deleted. Verifies that dbCheck still
* detects the inconsistency.
*
* @tags: [
* requires_fcv_80
* ]
*/
import {DbCheckOldFormatKeysTest, defaultNumDocs} from "jstests/replsets/libs/dbcheck_old_format_keys_test.js";
import {checkHealthLog, forEachNonArbiterNode, logQueries, runDbCheck} from "jstests/replsets/libs/dbcheck_utils.js";
// Skipping data consistency checks because data is inserted into primary and secondary separately.
TestData.skipCollectionAndIndexValidation = true;
TestData.skipCheckDBHashes = true;
const dbName = "testDB";
const collName = "oldFormatIndexKeyTestColl";
const dbCheckTest = new DbCheckOldFormatKeysTest({});
dbCheckTest.insertOldFormatKeyStrings(dbName, collName);
dbCheckTest.createMissingKeysOnAllNodes(dbName, collName);
const rst = dbCheckTest.getRst();
const primary = dbCheckTest.getPrimary();
jsTestLog("Running dbCheck");
runDbCheck(rst, primary.getDB(dbName), collName, {validateMode: "dataConsistencyAndMissingIndexKeysCheck"}, true);
forEachNonArbiterNode(rst, function (node) {
// Verify that dbCheck detects the inconsistencies for each doc.
checkHealthLog(node.getDB("local").system.healthlog, logQueries.missingIndexKeysQuery, defaultNumDocs);
// For each doc, verify that there are two missing keys by default.
const missingKeyEntries = node.getDB("local").system.healthlog.find(logQueries.errorQuery).toArray();
for (const missingKeyEntry of missingKeyEntries) {
const numMissingKeysForRecord = missingKeyEntry.data.context.missingIndexKeys.length;
const recordId = missingKeyEntry.data.context.recordID;
assert.eq(
2,
numMissingKeysForRecord,
`Expected to find 2 missing keys for record ${recordId} but found ${numMissingKeysForRecord} instead`,
);
}
// Verify that there are no other warning or error entries.
checkHealthLog(node.getDB("local").system.healthlog, logQueries.allErrorsOrWarningsQuery, defaultNumDocs);
});
dbCheckTest.stop();