Files
mongo/jstests/replsets/dbcheck/ignore_dbcheck_in_initial_sync.js
Brad Cater 24544088c7 SERVER-103992 Put dbcheck in its own subdir. (#35229)
GitOrigin-RevId: 145fc4403e4871e38e2c7377a507a182adf3e51c
2025-04-25 13:39:05 +00:00

90 lines
2.9 KiB
JavaScript

/**
* Test that dbcheck will be ignored during initial sync.
*
* @tags: [
* requires_fcv_80
* ]
*/
import {configureFailPoint} from "jstests/libs/fail_point_util.js";
import {ReplSetTest} from "jstests/libs/replsettest.js";
import {
checkHealthLog,
insertDocsWithMissingIndexKeys,
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 = "ignore_dbcheck_in_intial_sync";
const collName = "ignore_dbcheck_in_intial_sync-collection";
const doc1 = {
a: 1
};
const replSet = new ReplSetTest({
name: jsTestName(),
nodes: [
{},
{
rsConfig:
// disallow elections on secondary
{priority: 0}
}
],
nodeOptions: {setParameter: {dbCheckHealthLogEveryNBatches: 1}}
});
replSet.startSet();
replSet.initiate();
const primary = replSet.getPrimary();
const secondary = replSet.getSecondary();
const primaryHealthlog = primary.getDB("local").system.healthlog;
const primaryDb = primary.getDB(dbName);
const maxDocsPerBatch = 100;
jsTestLog("Testing that dbcheck command will be ignored during initial sync.");
const nDocs = 10;
insertDocsWithMissingIndexKeys(replSet, dbName, collName, doc1, nDocs);
replSet.awaitReplication();
const initialSyncNode = replSet.add({rsConfig: {priority: 0}});
const initialSyncHangBeforeSplittingControlFlowFailPoint =
configureFailPoint(initialSyncNode, "initialSyncHangBeforeSplittingControlFlow");
replSet.reInitiate();
initialSyncHangBeforeSplittingControlFlowFailPoint.wait();
runDbCheck(
replSet,
primaryDb,
collName,
{maxDocsPerBatch: maxDocsPerBatch, validateMode: "dataConsistencyAndMissingIndexKeysCheck"});
assert.commandWorked(initialSyncNode.adminCommand(
{configureFailPoint: 'initialSyncHangBeforeSplittingControlFlow', mode: 'off'}));
replSet.awaitSecondaryNodes(null, [initialSyncNode]);
// Check that the primary logged an error health log entry for each document with missing index key.
checkHealthLog(primaryHealthlog, logQueries.missingIndexKeysQuery, nDocs);
// Check that the primary does not have other error/warning entries.
checkHealthLog(primaryHealthlog, logQueries.allErrorsOrWarningsQuery, nDocs);
// Check that the start, batch, and stop entries are warning logs since the node skips dbcheck
// during initial sync.
const initialSyncNodeHealthLog = initialSyncNode.getDB("local").system.healthlog;
checkHealthLog(initialSyncNodeHealthLog, logQueries.duringInitialSyncQuery, 3);
// Check that the initial sync node does not have other info or error/warning entries.
checkHealthLog(initialSyncNodeHealthLog, logQueries.infoBatchQuery, 0);
checkHealthLog(initialSyncNodeHealthLog, logQueries.allErrorsOrWarningsQuery, 3);
replSet.stopSet();