summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands.cpp
diff options
context:
space:
mode:
authorRandolph Tan <randolph@10gen.com>2022-06-08 18:15:32 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-06-08 19:11:46 +0000
commit3a49875934cfd7e70d789b4ad7093286d189acc9 (patch)
tree0e5b718814c1301112c215177233cb62c930e026 /src/mongo/db/commands.cpp
parent7bc98aebab513db686b76f8cc0f406bc874a7ba9 (diff)
downloadmongo-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.cpp36
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();