70 lines
2.4 KiB
JavaScript
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();
|