mirror of https://github.com/mongodb/mongo
52 lines
1.9 KiB
JavaScript
52 lines
1.9 KiB
JavaScript
/**
|
|
* Test that transactions are not allowed on shard servers that have
|
|
* writeConcernMajorityJournalDefault = false.
|
|
*
|
|
* @tags: [
|
|
* disables_test_commands,
|
|
* uses_transactions,
|
|
* ]
|
|
*/
|
|
|
|
import {ReplSetTest} from "jstests/libs/replsettest.js";
|
|
|
|
// A testing exemption was made to allow transactions on shard server even if
|
|
// writeConcernMajorityJournalDefault = false. So we need to disable the exemption in this test
|
|
// in order to test the behavior.
|
|
TestData.testingDiagnosticsEnabled = false;
|
|
TestData.enableTestCommands = false;
|
|
|
|
// The following two options by default do not support enableTestCommands=false, change them
|
|
// accordingly so this test can run.
|
|
TestData.roleGraphInvalidationIsFatal = false;
|
|
TestData.authenticationDatabase = "local";
|
|
|
|
// Start the replica set with --shardsvr.
|
|
const replSet = new ReplSetTest({nodes: 1, nodeOptions: {shardsvr: ""}});
|
|
replSet.startSet();
|
|
let conf = replSet.getReplSetConfig();
|
|
conf.writeConcernMajorityJournalDefault = false;
|
|
replSet.initiate(conf);
|
|
|
|
const primary = replSet.getPrimary();
|
|
const session = primary.startSession();
|
|
const sessionDb = session.getDatabase("test");
|
|
const sessionColl = sessionDb.getCollection("foo");
|
|
|
|
jsTestLog("Test that non-transactional operations are allowed.");
|
|
assert.commandWorked(sessionColl.insert({_id: 1}));
|
|
|
|
jsTestLog("Test that transactions are not allowed.");
|
|
session.startTransaction();
|
|
assert.commandFailedWithCode(sessionColl.insert({_id: 2}), ErrorCodes.OperationNotSupportedInTransaction);
|
|
// All commands are not allowed including abortTransaction.
|
|
assert.commandFailedWithCode(session.abortTransaction_forTesting(), ErrorCodes.OperationNotSupportedInTransaction);
|
|
|
|
jsTestLog("Test that retryable writes are allowed.");
|
|
assert.commandWorked(sessionDb.runCommand({insert: "foo", documents: [{_id: 3}], txnNumber: NumberLong(1)}));
|
|
|
|
// Assert documents inserted.
|
|
assert.docEq([{_id: 1}, {_id: 3}], sessionColl.find().sort({_id: 1}).toArray());
|
|
|
|
replSet.stopSet();
|