diff options
author | Randolph Tan <randolph@10gen.com> | 2022-06-08 18:15:32 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-06-08 19:11:46 +0000 |
commit | 3a49875934cfd7e70d789b4ad7093286d189acc9 (patch) | |
tree | 0e5b718814c1301112c215177233cb62c930e026 /src/mongo/db/commands.cpp | |
parent | 7bc98aebab513db686b76f8cc0f406bc874a7ba9 (diff) | |
download | mongo-3a49875934cfd7e70d789b4ad7093286d189acc9.tar.gz |
SERVER-65101 Replace transaction and retryable write command allow lists with methods on Command
Diffstat (limited to 'src/mongo/db/commands.cpp')
-rw-r--r-- | src/mongo/db/commands.cpp | 36 |
1 files changed, 6 insertions, 30 deletions
diff --git a/src/mongo/db/commands.cpp b/src/mongo/db/commands.cpp index 7826963b3c2..ab870a4818c 100644 --- a/src/mongo/db/commands.cpp +++ b/src/mongo/db/commands.cpp @@ -112,34 +112,6 @@ bool checkAuthorizationImplPreParse(OperationContext* opCtx, return false; } -// TODO SERVER-65101: Replace this with a property on each command. -// The command names that are allowed in a multi-document transaction. -const StringMap<int> txnCmdAllowlist = {{"abortTransaction", 1}, - {"aggregate", 1}, - {"clusterAbortTransaction", 1}, - {"clusterAggregate", 1}, - {"clusterCommitTransaction", 1}, - {"clusterDelete", 1}, - {"clusterFind", 1}, - {"clusterGetMore", 1}, - {"clusterInsert", 1}, - {"clusterUpdate", 1}, - {"commitTransaction", 1}, - {"coordinateCommitTransaction", 1}, - {"create", 1}, - {"createIndexes", 1}, - {"delete", 1}, - {"distinct", 1}, - {"find", 1}, - {"findandmodify", 1}, - {"findAndModify", 1}, - {"getMore", 1}, - {"insert", 1}, - {"killCursors", 1}, - {"prepareTransaction", 1}, - {"testInternalTransactions", 1}, - {"update", 1}}; - auto getCommandInvocationHooks = ServiceContext::declareDecoration<std::unique_ptr<CommandInvocationHooks>>(); @@ -577,11 +549,15 @@ void CommandHelpers::canUseTransactions(const NamespaceString& nss, "http://dochub.mongodb.org/core/transaction-count for a recommended alternative.", cmdName != "count"_sd); - auto inTxnAllowlist = txnCmdAllowlist.find(cmdName) != txnCmdAllowlist.cend(); + auto command = findCommand(cmdName); + uassert(ErrorCodes::CommandNotFound, + str::stream() << "Encountered unknown command during check if can run in transactions: " + << cmdName, + command); uassert(ErrorCodes::OperationNotSupportedInTransaction, str::stream() << "Cannot run '" << cmdName << "' in a multi-document transaction.", - inTxnAllowlist); + command->allowedInTransactions()); const auto dbName = nss.db(); |