// Tests that the "failCommand" failpoint ignores commands from internal clients: SERVER-34943. // @tags: [requires_replication] // Prevent elections. import {ReplSetTest} from "jstests/libs/replsettest.js"; const replTest = new ReplSetTest({nodes: [{}, {rsConfig: {votes: 0, priority: 0}}]}); replTest.startSet(); replTest.initiate(); const primary = replTest.getPrimary(); const testDB = primary.getDB("test_failcommand_ignores_internal"); // Enough documents for three getMores. assert.commandWorked(testDB.collection.insertMany([{}, {}, {}])); const findReply = assert.commandWorked(testDB.runCommand({find: "collection", batchSize: 0})); const cursorId = findReply.cursor.id; // Test failing twice with a particular error code. assert.commandWorked( testDB.adminCommand({ configureFailPoint: "failCommand", mode: {times: 2}, data: {errorCode: ErrorCodes.BadValue, failCommands: ["getMore"]}, }), ); const getMore = { getMore: cursorId, collection: "collection", batchSize: 1, }; assert.commandFailedWithCode(testDB.runCommand(getMore), ErrorCodes.BadValue); // Waits for secondaries to do getMores on the oplog, which should be ignored by failCommand. assert.commandWorked(testDB.collection.insertOne({}, {writeConcern: {w: 2}})); // Second getMore fails but third succeeds, because configureFailPoint was passed {times: 2}. assert.commandFailedWithCode(testDB.runCommand(getMore), ErrorCodes.BadValue); assert.commandWorked(testDB.runCommand(getMore)); replTest.stopSet();