(function() {
|
"use strict";
|
|
load("jstests/core/txns/libs/prepare_helpers.js");
|
load("jstests/replsets/libs/rollback_test.js");
|
|
const rollbackTest = new RollbackTest();
|
const rollbackNode = rollbackTest.getPrimary();
|
|
// The makeDocs() function makes it easier to have transactions insert varying numbers of
|
// documents in order to keep all possible sums of count adjustments as distinct values.
|
let nextId = 0;
|
const makeDocs = (numDocs) => {
|
return Array.from({length: numDocs}, () => ({_id: ++nextId}));
|
};
|
|
const testDB = rollbackNode.getDB("test");
|
assert.commandWorked(testDB.mycoll.insert(makeDocs(2)));
|
|
rollbackTest.transitionToRollbackOperations();
|
|
// We perform some operations on the "test.mycoll" collection aside from starting and preparing
|
// a transaction in order to cause the count diff computed by replication to be non-zero.
|
assert.commandWorked(testDB.mycoll.insert(makeDocs(5)));
|
|
const session = rollbackNode.startSession({causalConsistency: false});
|
const sessionDB = session.getDatabase(testDB.getName());
|
|
session.startTransaction();
|
assert.commandWorked(sessionDB.mycoll.insert(makeDocs(10)));
|
PrepareHelpers.prepareTransaction(session);
|
|
rollbackTest.transitionToSyncSourceOperationsBeforeRollback();
|
|
// XXX: Workaround for SERVER-40322.
|
assert.commandWorked(rollbackNode.adminCommand(
|
{setParameter: 1, createRollbackDataFiles: false}));
|
|
rollbackTest.transitionToSyncSourceOperationsDuringRollback();
|
rollbackTest.transitionToSteadyStateOperations();
|
|
rollbackTest.stop();
|
})();
|