diff options
author | Tess Avitabile <tess.avitabile@mongodb.com> | 2019-12-16 21:15:41 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-12-16 21:15:41 +0000 |
commit | ec498c5968974012d50d6d04c26cd2cd0db87d22 (patch) | |
tree | 39a80b70f400f27bd4af3d83748112bfed7cc3b4 /src/mongo/db/commands.cpp | |
parent | d9f793354be29ef51e7d32e8cb46e7bf84b99d66 (diff) | |
download | mongo-ec498c5968974012d50d6d04c26cd2cd0db87d22.tar.gz |
SERVER-44510 Implement exhaust isMaster
Diffstat (limited to 'src/mongo/db/commands.cpp')
-rw-r--r-- | src/mongo/db/commands.cpp | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/src/mongo/db/commands.cpp b/src/mongo/db/commands.cpp index 469c71c49a2..e67e02b8c85 100644 --- a/src/mongo/db/commands.cpp +++ b/src/mongo/db/commands.cpp @@ -614,9 +614,11 @@ void CommandInvocation::checkAuthorization(OperationContext* opCtx, ////////////////////////////////////////////////////////////// // Command -class BasicCommand::Invocation final : public CommandInvocation { +class BasicCommandWithReplyBuilderInterface::Invocation final : public CommandInvocation { public: - Invocation(OperationContext*, const OpMsgRequest& request, BasicCommand* command) + Invocation(OperationContext*, + const OpMsgRequest& request, + BasicCommandWithReplyBuilderInterface* command) : CommandInvocation(command), _command(command), _request(&request), @@ -625,10 +627,11 @@ public: private: void run(OperationContext* opCtx, rpc::ReplyBuilderInterface* result) override { opCtx->lockState()->setDebugInfo(redact(_request->body)); - BSONObjBuilder bob = result->getBodyBuilder(); - bool ok = _command->run(opCtx, _dbName, _request->body, bob); - if (!ok) + bool ok = _command->runWithReplyBuilder(opCtx, _dbName, _request->body, result); + if (!ok) { + BSONObjBuilder bob = result->getBodyBuilder(); CommandHelpers::appendSimpleCommandStatus(bob, ok); + } } void explain(OperationContext* opCtx, @@ -666,7 +669,7 @@ private: return _request->body; } - BasicCommand* const _command; + BasicCommandWithReplyBuilderInterface* const _command; const OpMsgRequest* const _request; const std::string _dbName; }; @@ -688,8 +691,8 @@ void Command::snipForLogging(mutablebson::Document* cmdObj) const { } -std::unique_ptr<CommandInvocation> BasicCommand::parse(OperationContext* opCtx, - const OpMsgRequest& request) { +std::unique_ptr<CommandInvocation> BasicCommandWithReplyBuilderInterface::parse( + OperationContext* opCtx, const OpMsgRequest& request) { CommandHelpers::uassertNoDocumentSequences(getName(), request); return std::make_unique<Invocation>(opCtx, request, this); } @@ -701,22 +704,22 @@ Command::Command(StringData name, StringData oldName) globalCommandRegistry()->registerCommand(this, name, oldName); } -Status BasicCommand::explain(OperationContext* opCtx, - const OpMsgRequest& request, - ExplainOptions::Verbosity verbosity, - rpc::ReplyBuilderInterface* result) const { +Status BasicCommandWithReplyBuilderInterface::explain(OperationContext* opCtx, + const OpMsgRequest& request, + ExplainOptions::Verbosity verbosity, + rpc::ReplyBuilderInterface* result) const { return {ErrorCodes::IllegalOperation, str::stream() << "Cannot explain cmd: " << getName()}; } -Status BasicCommand::checkAuthForOperation(OperationContext* opCtx, - const std::string& dbname, - const BSONObj& cmdObj) const { +Status BasicCommandWithReplyBuilderInterface::checkAuthForOperation(OperationContext* opCtx, + const std::string& dbname, + const BSONObj& cmdObj) const { return checkAuthForCommand(opCtx->getClient(), dbname, cmdObj); } -Status BasicCommand::checkAuthForCommand(Client* client, - const std::string& dbname, - const BSONObj& cmdObj) const { +Status BasicCommandWithReplyBuilderInterface::checkAuthForCommand(Client* client, + const std::string& dbname, + const BSONObj& cmdObj) const { std::vector<Privilege> privileges; this->addRequiredPrivileges(dbname, cmdObj, &privileges); if (AuthorizationSession::get(client)->isAuthorizedForPrivileges(privileges)) |