Files
mongo/jstests/replsets/ignore_dbcheck_in_initial_sync.js
Samy Lanka 1a568af823 Revert "SERVER-98574: Enable dbCheck feature flag (#30454)" (#30623)
GitOrigin-RevId: feed461c7a047bc91ac1b7aadd2f177e267026ed
2024-12-23 19:58:17 +00:00

90 lines
2.9 KiB
JavaScript

/**
* Test that dbcheck will be ignored during initial sync.
*
* @tags: [
* featureFlagSecondaryIndexChecksInDbCheck
* ]
*/
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();