Files
mongo/jstests/sharding/txn_two_phase_commit_commands_basic_requirements.js
Zac 591928c619 SERVER-108478 JS formatted by prettier and remove clang-format (#39656)
GitOrigin-RevId: 6c8f6aded47f260aa4f7c231b17dae3302cb1e04
2025-08-21 17:27:09 +00:00

70 lines
2.4 KiB
JavaScript

/**
* The equivalent of jstests/core/txns/statement_ids_accepted.js, but for transactions commands that
* are only legal in sharded clusters (e.g., the two phase commit commands).
* @tags: [uses_transactions]
*/
import {ReplSetTest} from "jstests/libs/replsettest.js";
import {ShardingTest} from "jstests/libs/shardingtest.js";
// This test requires running transactions directly against the shard.
TestData.replicaSetEndpointIncompatible = true;
const dbName = "test";
const txnNumber = 0;
const lsid = {
id: UUID(),
};
const checkCoordinatorCommandsRejected = function (conn, expectedErrorCode) {
assert.commandFailedWithCode(
conn.adminCommand({
coordinateCommitTransaction: 1,
participants: [{shardId: "dummy1"}, {shardId: "dummy2"}],
lsid: lsid,
txnNumber: NumberLong(txnNumber),
stmtId: NumberInt(1),
autocommit: false,
}),
expectedErrorCode,
);
};
const checkCoordinatorCommandsAgainstNonAdminDbRejected = function (conn) {
const testDB = conn.getDB(dbName);
assert.commandFailedWithCode(
testDB.runCommand({
coordinateCommitTransaction: 1,
participants: [{shardId: "dummy1"}, {shardId: "dummy2"}],
lsid: lsid,
txnNumber: NumberLong(txnNumber),
stmtId: NumberInt(0),
autocommit: false,
}),
ErrorCodes.Unauthorized,
);
};
const st = new ShardingTest({shards: 1});
jsTest.log("Verify that coordinator commands are only accepted against the admin database");
checkCoordinatorCommandsAgainstNonAdminDbRejected(st.rs0.getPrimary());
checkCoordinatorCommandsAgainstNonAdminDbRejected(st.configRS.getPrimary());
st.stop();
jsTest.log("Verify that a shard server that has not yet been added to a cluster does not accept coordinator commands");
const shardsvrReplSet = new ReplSetTest({nodes: 1, nodeOptions: {shardsvr: ""}});
shardsvrReplSet.startSet();
shardsvrReplSet.initiate();
checkCoordinatorCommandsRejected(shardsvrReplSet.getPrimary(), ErrorCodes.ShardingStateNotInitialized);
shardsvrReplSet.stopSet();
jsTest.log("Verify that a non-config server, non-shard server does not accept coordinator commands");
const standaloneReplSet = new ReplSetTest({nodes: 1});
standaloneReplSet.startSet();
standaloneReplSet.initiate();
checkCoordinatorCommandsRejected(standaloneReplSet.getPrimary(), ErrorCodes.ShardingStateNotInitialized);
standaloneReplSet.stopSet();