diff options
author | Billy Donahue <billy.donahue@mongodb.com> | 2018-01-10 17:09:22 -0500 |
---|---|---|
committer | Billy Donahue <billy.donahue@mongodb.com> | 2018-01-16 13:52:44 -0500 |
commit | a6e45f0e35724ae7958e31fc141c89afcefe4d33 (patch) | |
tree | 5ac0bf28fc1b977078845cbff966ff3427cfaa92 /src/mongo/s/commands | |
parent | 1378f8ec42068913c5bdc5927bbe86d5aed08814 (diff) | |
download | mongo-a6e45f0e35724ae7958e31fc141c89afcefe4d33.tar.gz |
SERVER-32646 CommandHelpers
Diffstat (limited to 'src/mongo/s/commands')
37 files changed, 296 insertions, 221 deletions
diff --git a/src/mongo/s/commands/cluster_add_shard_cmd.cpp b/src/mongo/s/commands/cluster_add_shard_cmd.cpp index e3a35c12e1b..1fee4f8cfb9 100644 --- a/src/mongo/s/commands/cluster_add_shard_cmd.cpp +++ b/src/mongo/s/commands/cluster_add_shard_cmd.cpp @@ -98,11 +98,11 @@ public: opCtx, kPrimaryOnlyReadPreference, "admin", - Command::appendMajorityWriteConcern( - Command::appendPassthroughFields(cmdObj, parsedRequest.toCommandForConfig())), + CommandHelpers::appendMajorityWriteConcern(CommandHelpers::appendPassthroughFields( + cmdObj, parsedRequest.toCommandForConfig())), Shard::RetryPolicy::kIdempotent)); - Command::filterCommandReplyForPassthrough(cmdResponse.response, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResponse.response, &result); return true; } diff --git a/src/mongo/s/commands/cluster_aggregate.cpp b/src/mongo/s/commands/cluster_aggregate.cpp index 60fe5bfbb11..f7e55ee4965 100644 --- a/src/mongo/s/commands/cluster_aggregate.cpp +++ b/src/mongo/s/commands/cluster_aggregate.cpp @@ -110,7 +110,7 @@ Status appendCursorResponseToCommandResult(const ShardId& shardId, } // Pass the results from the remote shard into our command response. - result->appendElementsUnique(Command::filterCommandReplyForPassthrough(cursorResponse)); + result->appendElementsUnique(CommandHelpers::filterCommandReplyForPassthrough(cursorResponse)); return getStatusFromCommandResult(result->asTempObj()); } @@ -322,7 +322,7 @@ Status ClusterAggregate::runAggregate(OperationContext* opCtx, liteParsedPipeline, std::move(pipeline), {}); - Command::filterCommandReplyForPassthrough(cursorResponse, result); + CommandHelpers::filterCommandReplyForPassthrough(cursorResponse, result); return getStatusFromCommandResult(result->asTempObj()); } @@ -382,7 +382,7 @@ Status ClusterAggregate::runAggregate(OperationContext* opCtx, // We don't need to storePossibleCursor or propagate writeConcern errors; an $out pipeline // can never run on mongoS. Filter the command response and return immediately. - Command::filterCommandReplyForPassthrough(cursorResponse, result); + CommandHelpers::filterCommandReplyForPassthrough(cursorResponse, result); return getStatusFromCommandResult(result->asTempObj()); } @@ -464,7 +464,7 @@ Status ClusterAggregate::aggPassthrough(OperationContext* opCtx, // Format the command for the shard. This adds the 'fromMongos' field, wraps the command as an // explain if necessary, and rewrites the result into a format safe to forward to shards. - cmdObj = Command::filterCommandRequestForPassthrough( + cmdObj = CommandHelpers::filterCommandRequestForPassthrough( PipelineS::createCommandForTargetedShards(aggRequest, cmdObj, nullptr)); auto cmdResponse = uassertStatusOK(shard->runCommandWithFixedRetryAttempts( @@ -505,7 +505,7 @@ Status ClusterAggregate::aggPassthrough(OperationContext* opCtx, appendWriteConcernErrorToCmdResponse(shard->getId(), wcErrorElem, *out); } - out->appendElementsUnique(Command::filterCommandReplyForPassthrough(result)); + out->appendElementsUnique(CommandHelpers::filterCommandReplyForPassthrough(result)); BSONObj responseObj = out->asTempObj(); if (ResolvedView::isResolvedViewErrorResponse(responseObj)) { diff --git a/src/mongo/s/commands/cluster_commands_helpers.cpp b/src/mongo/s/commands/cluster_commands_helpers.cpp index 0e0a6ccba31..106a0dd84c5 100644 --- a/src/mongo/s/commands/cluster_commands_helpers.cpp +++ b/src/mongo/s/commands/cluster_commands_helpers.cpp @@ -301,7 +301,7 @@ bool appendRawResponses(OperationContext* opCtx, // Convert the error status back into the form of a command result and append it as the // raw response. BSONObjBuilder statusObjBob; - Command::appendCommandStatus(statusObjBob, sendStatus); + CommandHelpers::appendCommandStatus(statusObjBob, sendStatus); subobj.append(shardConnStr, statusObjBob.obj()); errors.push_back(std::make_pair(shardConnStr, sendStatus)); @@ -313,7 +313,7 @@ bool appendRawResponses(OperationContext* opCtx, auto& resObj = shardResponse.swResponse.getValue().data; // Append the shard's raw response. - subobj.append(shardConnStr, Command::filterCommandReplyForPassthrough(resObj)); + subobj.append(shardConnStr, CommandHelpers::filterCommandReplyForPassthrough(resObj)); auto commandStatus = getStatusFromCommandResult(resObj); if (!commandStatus.isOK()) { @@ -409,7 +409,7 @@ bool appendEmptyResultSet(BSONObjBuilder& result, Status status, const std::stri return true; } - return Command::appendCommandStatus(result, status); + return CommandHelpers::appendCommandStatus(result, status); } CachedCollectionRoutingInfo getShardedCollection(OperationContext* opCtx, @@ -432,13 +432,13 @@ StatusWith<CachedDatabaseInfo> createShardDatabase(OperationContext* opCtx, Stri auto configShard = Grid::get(opCtx)->shardRegistry()->getConfigShard(); auto createDbStatus = - uassertStatusOK( - configShard->runCommandWithFixedRetryAttempts( - opCtx, - ReadPreferenceSetting(ReadPreference::PrimaryOnly), - "admin", - Command::appendMajorityWriteConcern(configCreateDatabaseRequest.toBSON()), - Shard::RetryPolicy::kIdempotent)) + uassertStatusOK(configShard->runCommandWithFixedRetryAttempts( + opCtx, + ReadPreferenceSetting(ReadPreference::PrimaryOnly), + "admin", + CommandHelpers::appendMajorityWriteConcern( + configCreateDatabaseRequest.toBSON()), + Shard::RetryPolicy::kIdempotent)) .commandStatus; if (createDbStatus.isOK() || createDbStatus == ErrorCodes::NamespaceExists) { diff --git a/src/mongo/s/commands/cluster_control_balancer_cmd.cpp b/src/mongo/s/commands/cluster_control_balancer_cmd.cpp index 65d955efc8f..17f88f3d655 100644 --- a/src/mongo/s/commands/cluster_control_balancer_cmd.cpp +++ b/src/mongo/s/commands/cluster_control_balancer_cmd.cpp @@ -91,7 +91,7 @@ public: uassertStatusOK(cmdResponse.commandStatus); // Append any return value from the response, which the config server returned - filterCommandReplyForPassthrough(cmdResponse.response, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResponse.response, &result); return true; } diff --git a/src/mongo/s/commands/cluster_count_cmd.cpp b/src/mongo/s/commands/cluster_count_cmd.cpp index e88eb8c00cc..3c34593cc95 100644 --- a/src/mongo/s/commands/cluster_count_cmd.cpp +++ b/src/mongo/s/commands/cluster_count_cmd.cpp @@ -110,7 +110,7 @@ public: if (status.isOK()) { collation = collationElement.Obj(); } else if (status != ErrorCodes::NoSuchKey) { - return appendCommandStatus(result, status); + return CommandHelpers::appendCommandStatus(result, status); } if (cmdObj["limit"].isNumber()) { @@ -154,7 +154,7 @@ public: if (ErrorCodes::CommandOnShardedViewNotSupportedOnMongod == swShardResponses.getStatus()) { if (viewDefinition.isEmpty()) { - return appendCommandStatus( + return CommandHelpers::appendCommandStatus( result, {ErrorCodes::InternalError, str::stream() @@ -166,17 +166,17 @@ public: auto countRequest = CountRequest::parseFromBSON(nss, cmdObj, false); if (!countRequest.isOK()) { - return appendCommandStatus(result, countRequest.getStatus()); + return CommandHelpers::appendCommandStatus(result, countRequest.getStatus()); } auto aggCmdOnView = countRequest.getValue().asAggregationCommand(); if (!aggCmdOnView.isOK()) { - return appendCommandStatus(result, aggCmdOnView.getStatus()); + return CommandHelpers::appendCommandStatus(result, aggCmdOnView.getStatus()); } auto aggRequestOnView = AggregationRequest::parseFromBSON(nss, aggCmdOnView.getValue()); if (!aggRequestOnView.isOK()) { - return appendCommandStatus(result, aggRequestOnView.getStatus()); + return CommandHelpers::appendCommandStatus(result, aggRequestOnView.getStatus()); } auto resolvedView = ResolvedView::fromBSON(viewDefinition); @@ -184,14 +184,14 @@ public: resolvedView.asExpandedViewAggregation(aggRequestOnView.getValue()); auto resolvedAggCmd = resolvedAggRequest.serializeToCommandObj().toBson(); - BSONObj aggResult = Command::runCommandDirectly( + BSONObj aggResult = CommandHelpers::runCommandDirectly( opCtx, OpMsgRequest::fromDBAndBody(dbname, std::move(resolvedAggCmd))); result.resetToEmpty(); ViewResponseFormatter formatter(aggResult); auto formatStatus = formatter.appendAsCountResponse(&result); if (!formatStatus.isOK()) { - return appendCommandStatus(result, formatStatus); + return CommandHelpers::appendCommandStatus(result, formatStatus); } return true; @@ -228,7 +228,7 @@ public: auto errorWithContext = Status(status.code(), str::stream() << "failed on: " << response.shardId << causedBy(status.reason())); - return appendCommandStatus(result, errorWithContext); + return CommandHelpers::appendCommandStatus(result, errorWithContext); } shardSubTotal.doneFast(); diff --git a/src/mongo/s/commands/cluster_current_op.cpp b/src/mongo/s/commands/cluster_current_op.cpp index 3dad4b0c6bd..4cc75ffc87b 100644 --- a/src/mongo/s/commands/cluster_current_op.cpp +++ b/src/mongo/s/commands/cluster_current_op.cpp @@ -85,7 +85,7 @@ private: return status; } - appendCommandStatus(responseBuilder, Status::OK()); + CommandHelpers::appendCommandStatus(responseBuilder, Status::OK()); return CursorResponse::parseFromBSON(responseBuilder.obj()); } diff --git a/src/mongo/s/commands/cluster_db_stats_cmd.cpp b/src/mongo/s/commands/cluster_db_stats_cmd.cpp index 54edc5c9db4..4f11dc5c146 100644 --- a/src/mongo/s/commands/cluster_db_stats_cmd.cpp +++ b/src/mongo/s/commands/cluster_db_stats_cmd.cpp @@ -68,13 +68,13 @@ public: const BSONObj& cmdObj, std::string& errmsg, BSONObjBuilder& output) override { - auto shardResponses = uassertStatusOK( - scatterGatherUnversionedTargetAllShards(opCtx, - dbName, - boost::none, - filterCommandRequestForPassthrough(cmdObj), - ReadPreferenceSetting::get(opCtx), - Shard::RetryPolicy::kIdempotent)); + auto shardResponses = uassertStatusOK(scatterGatherUnversionedTargetAllShards( + opCtx, + dbName, + boost::none, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + ReadPreferenceSetting::get(opCtx), + Shard::RetryPolicy::kIdempotent)); if (!appendRawResponses(opCtx, &errmsg, &output, shardResponses)) { return false; } diff --git a/src/mongo/s/commands/cluster_drop_cmd.cpp b/src/mongo/s/commands/cluster_drop_cmd.cpp index feb0d75455e..6a8081c20c2 100644 --- a/src/mongo/s/commands/cluster_drop_cmd.cpp +++ b/src/mongo/s/commands/cluster_drop_cmd.cpp @@ -70,7 +70,7 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) override { - const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); // Invalidate the routing table cache entry for this collection so that we reload it the // next time it is accessed, even if sending the command to the config server fails due @@ -83,11 +83,11 @@ public: opCtx, ReadPreferenceSetting(ReadPreference::PrimaryOnly), "admin", - Command::appendMajorityWriteConcern(Command::appendPassthroughFields( + CommandHelpers::appendMajorityWriteConcern(CommandHelpers::appendPassthroughFields( cmdObj, BSON("_configsvrDropCollection" << nss.toString()))), Shard::RetryPolicy::kIdempotent)); - Command::filterCommandReplyForPassthrough(cmdResponse.response, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResponse.response, &result); return true; } diff --git a/src/mongo/s/commands/cluster_drop_database_cmd.cpp b/src/mongo/s/commands/cluster_drop_database_cmd.cpp index 6285acdec75..da0380565eb 100644 --- a/src/mongo/s/commands/cluster_drop_database_cmd.cpp +++ b/src/mongo/s/commands/cluster_drop_database_cmd.cpp @@ -88,11 +88,11 @@ public: opCtx, ReadPreferenceSetting(ReadPreference::PrimaryOnly), "admin", - Command::appendMajorityWriteConcern( - Command::appendPassthroughFields(cmdObj, BSON("_configsvrDropDatabase" << dbname))), + CommandHelpers::appendMajorityWriteConcern(CommandHelpers::appendPassthroughFields( + cmdObj, BSON("_configsvrDropDatabase" << dbname))), Shard::RetryPolicy::kIdempotent)); - Command::filterCommandReplyForPassthrough(cmdResponse.response, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResponse.response, &result); return true; } diff --git a/src/mongo/s/commands/cluster_enable_sharding_cmd.cpp b/src/mongo/s/commands/cluster_enable_sharding_cmd.cpp index 3ef6624984b..fd5e6b566b6 100644 --- a/src/mongo/s/commands/cluster_enable_sharding_cmd.cpp +++ b/src/mongo/s/commands/cluster_enable_sharding_cmd.cpp @@ -102,11 +102,11 @@ public: opCtx, ReadPreferenceSetting(ReadPreference::PrimaryOnly), "admin", - Command::appendMajorityWriteConcern( - Command::appendPassthroughFields(cmdObj, BSON("_configsvrEnableSharding" << db))), + CommandHelpers::appendMajorityWriteConcern(CommandHelpers::appendPassthroughFields( + cmdObj, BSON("_configsvrEnableSharding" << db))), Shard::RetryPolicy::kIdempotent)); - Command::filterCommandReplyForPassthrough(cmdResponse.response, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResponse.response, &result); return true; } diff --git a/src/mongo/s/commands/cluster_explain.cpp b/src/mongo/s/commands/cluster_explain.cpp index 33dabb52f74..c18ba90aedc 100644 --- a/src/mongo/s/commands/cluster_explain.cpp +++ b/src/mongo/s/commands/cluster_explain.cpp @@ -118,7 +118,7 @@ std::vector<Strategy::CommandResult> ClusterExplain::downconvert( } // Convert the error status back into the format of a command result. BSONObjBuilder statusObjBob; - Command::appendCommandStatus(statusObjBob, status); + CommandHelpers::appendCommandStatus(statusObjBob, status); // Get the Shard object in order to get the ConnectionString. auto shard = @@ -130,7 +130,7 @@ std::vector<Strategy::CommandResult> ClusterExplain::downconvert( // static BSONObj ClusterExplain::wrapAsExplain(const BSONObj& cmdObj, ExplainOptions::Verbosity verbosity) { - auto filtered = Command::filterCommandRequestForPassthrough(cmdObj); + auto filtered = CommandHelpers::filterCommandRequestForPassthrough(cmdObj); BSONObjBuilder out; out.append("explain", filtered); out.append("verbosity", ExplainOptions::verbosityString(verbosity)); @@ -138,7 +138,7 @@ BSONObj ClusterExplain::wrapAsExplain(const BSONObj& cmdObj, ExplainOptions::Ver // Propagate all generic arguments out of the inner command since the shards will only process // them at the top level. for (auto elem : filtered) { - if (Command::isGenericArgument(elem.fieldNameStringData())) { + if (CommandHelpers::isGenericArgument(elem.fieldNameStringData())) { out.append(elem); } } diff --git a/src/mongo/s/commands/cluster_explain_cmd.cpp b/src/mongo/s/commands/cluster_explain_cmd.cpp index 0b7897f416c..a02f11943c6 100644 --- a/src/mongo/s/commands/cluster_explain_cmd.cpp +++ b/src/mongo/s/commands/cluster_explain_cmd.cpp @@ -95,7 +95,7 @@ public: BSONObj explainObj = cmdObj.firstElement().Obj(); - Command* commToExplain = Command::findCommand(explainObj.firstElementFieldName()); + Command* commToExplain = CommandHelpers::findCommand(explainObj.firstElementFieldName()); if (NULL == commToExplain) { mongoutils::str::stream ss; ss << "unknown command: " << explainObj.firstElementFieldName(); @@ -112,7 +112,7 @@ public: BSONObjBuilder& result) { auto verbosity = ExplainOptions::parseCmdBSON(cmdObj); if (!verbosity.isOK()) { - return appendCommandStatus(result, verbosity.getStatus()); + return CommandHelpers::appendCommandStatus(result, verbosity.getStatus()); } // This is the nested command which we are explaining. We need to propagate generic @@ -134,7 +134,7 @@ public: // If the argument is in both the inner and outer command, we currently let the // inner version take precedence. const auto name = outerElem.fieldNameStringData(); - if (Command::isGenericArgument(name) && !innerObj.hasField(name)) { + if (CommandHelpers::isGenericArgument(name) && !innerObj.hasField(name)) { bob.append(outerElem); } } @@ -142,9 +142,9 @@ public: }()); const std::string cmdName = explainObj.firstElementFieldName(); - Command* commToExplain = Command::findCommand(cmdName); + Command* commToExplain = CommandHelpers::findCommand(cmdName); if (!commToExplain) { - return appendCommandStatus( + return CommandHelpers::appendCommandStatus( result, Status{ErrorCodes::CommandNotFound, str::stream() << "Explain failed due to unknown command: " << cmdName}); @@ -154,7 +154,7 @@ public: Status explainStatus = commToExplain->explain(opCtx, dbName, explainObj, verbosity.getValue(), &result); if (!explainStatus.isOK()) { - return appendCommandStatus(result, explainStatus); + return CommandHelpers::appendCommandStatus(result, explainStatus); } return true; diff --git a/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp b/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp index a07a4ae5b88..5dbc3f994b4 100644 --- a/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp +++ b/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp @@ -101,7 +101,7 @@ public: const BSONObj& cmdObj, ExplainOptions::Verbosity verbosity, BSONObjBuilder* out) const override { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); auto routingInfo = uassertStatusOK(Grid::get(opCtx)->catalogCache()->getCollectionRoutingInfo(opCtx, nss)); @@ -152,7 +152,7 @@ public: const std::string& dbName, const BSONObj& cmdObj, BSONObjBuilder& result) override { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); // findAndModify should only be creating database if upsert is true, but this would require // that the parsing be pulled into this function. @@ -196,7 +196,8 @@ private: std::vector<AsyncRequestsSender::Request> requests; requests.emplace_back( shardId, - appendShardVersion(filterCommandRequestForPassthrough(cmdObj), shardVersion)); + appendShardVersion(CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + shardVersion)); AsyncRequestsSender ars(opCtx, Grid::get(opCtx)->getExecutorPool()->getArbitraryExecutor(), @@ -226,7 +227,8 @@ private: appendWriteConcernErrorToCmdResponse(shardId, wcErrorElem, *result); } - result->appendElementsUnique(filterCommandReplyForPassthrough(response.data)); + result->appendElementsUnique( + CommandHelpers::filterCommandReplyForPassthrough(response.data)); } } findAndModifyCmd; diff --git a/src/mongo/s/commands/cluster_find_cmd.cpp b/src/mongo/s/commands/cluster_find_cmd.cpp index 51d796f21fb..eb54af9caaf 100644 --- a/src/mongo/s/commands/cluster_find_cmd.cpp +++ b/src/mongo/s/commands/cluster_find_cmd.cpp @@ -106,7 +106,7 @@ public: const BSONObj& cmdObj, ExplainOptions::Verbosity verbosity, BSONObjBuilder* out) const final { - const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); // Parse the command BSON to a QueryRequest. bool isExplain = true; auto qr = QueryRequest::makeFromFindCommand(std::move(nss), cmdObj, isExplain); @@ -142,7 +142,7 @@ public: auto status = ClusterAggregate::runAggregate( opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, out); - appendCommandStatus(*out, status); + CommandHelpers::appendCommandStatus(*out, status); return status; } @@ -156,12 +156,12 @@ public: // We count find command as a query op. globalOpCounters.gotQuery(); - const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); const bool isExplain = false; auto qr = QueryRequest::makeFromFindCommand(nss, cmdObj, isExplain); if (!qr.isOK()) { - return appendCommandStatus(result, qr.getStatus()); + return CommandHelpers::appendCommandStatus(result, qr.getStatus()); } const boost::intrusive_ptr<ExpressionContext> expCtx; @@ -171,7 +171,7 @@ public: ExtensionsCallbackNoop(), MatchExpressionParser::kAllowAllSpecialFeatures); if (!cq.isOK()) { - return appendCommandStatus(result, cq.getStatus()); + return CommandHelpers::appendCommandStatus(result, cq.getStatus()); } // Do the work to generate the first batch of results. This blocks waiting to get responses @@ -184,13 +184,14 @@ public: if (cursorId.getStatus() == ErrorCodes::CommandOnShardedViewNotSupportedOnMongod) { auto aggCmdOnView = cq.getValue()->getQueryRequest().asAggregationCommand(); if (!aggCmdOnView.isOK()) { - return appendCommandStatus(result, aggCmdOnView.getStatus()); + return CommandHelpers::appendCommandStatus(result, aggCmdOnView.getStatus()); } auto aggRequestOnView = AggregationRequest::parseFromBSON(nss, aggCmdOnView.getValue()); if (!aggRequestOnView.isOK()) { - return appendCommandStatus(result, aggRequestOnView.getStatus()); + return CommandHelpers::appendCommandStatus(result, + aggRequestOnView.getStatus()); } auto resolvedView = ResolvedView::fromBSON(viewDefinition); @@ -208,11 +209,11 @@ public: auto status = ClusterAggregate::runAggregate( opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, &result); - appendCommandStatus(result, status); + CommandHelpers::appendCommandStatus(result, status); return status.isOK(); } - return appendCommandStatus(result, cursorId.getStatus()); + return CommandHelpers::appendCommandStatus(result, cursorId.getStatus()); } // Build the response document. diff --git a/src/mongo/s/commands/cluster_get_last_error_cmd.cpp b/src/mongo/s/commands/cluster_get_last_error_cmd.cpp index 53fb6d5f7e8..e7150e595b3 100644 --- a/src/mongo/s/commands/cluster_get_last_error_cmd.cpp +++ b/src/mongo/s/commands/cluster_get_last_error_cmd.cpp @@ -247,8 +247,12 @@ public: const HostOpTimeMap hostOpTimes(ClusterLastErrorInfo::get(cc())->getPrevHostOpTimes()); std::vector<LegacyWCResponse> wcResponses; - auto status = enforceLegacyWriteConcern( - opCtx, dbname, filterCommandRequestForPassthrough(cmdObj), hostOpTimes, &wcResponses); + auto status = + enforceLegacyWriteConcern(opCtx, + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + hostOpTimes, + &wcResponses); // Don't forget about our last hosts, reset the client info ClusterLastErrorInfo::get(cc())->disableForCommand(); @@ -308,7 +312,7 @@ public: if (numWCErrors == 1) { // Return the single write concern error we found, err should be set or not // from gle response - filterCommandReplyForPassthrough(lastErrResponse->gleResponse, &result); + CommandHelpers::filterCommandReplyForPassthrough(lastErrResponse->gleResponse, &result); return lastErrResponse->gleResponse["ok"].trueValue(); } else { // Return a generic combined WC error message @@ -318,7 +322,7 @@ public: // Need to always return err result.appendNull("err"); - return appendCommandStatus( + return CommandHelpers::appendCommandStatus( result, Status(ErrorCodes::WriteConcernFailed, "multiple write concern errors occurred")); } diff --git a/src/mongo/s/commands/cluster_get_shard_version_cmd.cpp b/src/mongo/s/commands/cluster_get_shard_version_cmd.cpp index 6758342d307..4ceb6cbcf64 100644 --- a/src/mongo/s/commands/cluster_get_shard_version_cmd.cpp +++ b/src/mongo/s/commands/cluster_get_shard_version_cmd.cpp @@ -76,7 +76,7 @@ public: } std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsFullyQualified(dbname, cmdObj); + return CommandHelpers::parseNsFullyQualified(dbname, cmdObj); } bool run(OperationContext* opCtx, diff --git a/src/mongo/s/commands/cluster_getmore_cmd.cpp b/src/mongo/s/commands/cluster_getmore_cmd.cpp index dcf15e263ac..c90eeaff5ad 100644 --- a/src/mongo/s/commands/cluster_getmore_cmd.cpp +++ b/src/mongo/s/commands/cluster_getmore_cmd.cpp @@ -100,13 +100,13 @@ public: StatusWith<GetMoreRequest> parseStatus = GetMoreRequest::parseFromBSON(dbname, cmdObj); if (!parseStatus.isOK()) { - return appendCommandStatus(result, parseStatus.getStatus()); + return CommandHelpers::appendCommandStatus(result, parseStatus.getStatus()); } const GetMoreRequest& request = parseStatus.getValue(); auto response = ClusterFind::runGetMore(opCtx, request); if (!response.isOK()) { - return appendCommandStatus(result, response.getStatus()); + return CommandHelpers::appendCommandStatus(result, response.getStatus()); } response.getValue().addToBSON(CursorResponse::ResponseType::SubsequentResponse, &result); diff --git a/src/mongo/s/commands/cluster_index_filter_cmd.cpp b/src/mongo/s/commands/cluster_index_filter_cmd.cpp index b050368e3a0..97437c8bbef 100644 --- a/src/mongo/s/commands/cluster_index_filter_cmd.cpp +++ b/src/mongo/s/commands/cluster_index_filter_cmd.cpp @@ -107,7 +107,7 @@ public: const BSONObj query; Strategy::commandOp(opCtx, dbname, - filterCommandRequestForPassthrough(cmdObj), + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), nss.ns(), query, CollationSpec::kSimpleSpec, @@ -124,7 +124,7 @@ public: // XXX: In absence of sensible aggregation strategy, // promote first shard's result to top level. if (i == results.begin()) { - filterCommandReplyForPassthrough(cmdResult.result, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResult.result, &result); clusterCmdResult = cmdResult.result["ok"].trueValue(); } diff --git a/src/mongo/s/commands/cluster_is_master_cmd.cpp b/src/mongo/s/commands/cluster_is_master_cmd.cpp index fa4d556d922..2e36478d263 100644 --- a/src/mongo/s/commands/cluster_is_master_cmd.cpp +++ b/src/mongo/s/commands/cluster_is_master_cmd.cpp @@ -81,7 +81,7 @@ public: BSONElement element = cmdObj[kMetadataDocumentName]; if (!element.eoo()) { if (seenIsMaster) { - return Command::appendCommandStatus( + return CommandHelpers::appendCommandStatus( result, Status(ErrorCodes::ClientMetadataCannotBeMutated, "The client metadata document may only be sent in the first isMaster")); @@ -90,7 +90,8 @@ public: auto swParseClientMetadata = ClientMetadata::parse(element); if (!swParseClientMetadata.getStatus().isOK()) { - return Command::appendCommandStatus(result, swParseClientMetadata.getStatus()); + return CommandHelpers::appendCommandStatus(result, + swParseClientMetadata.getStatus()); } invariant(swParseClientMetadata.getValue()); diff --git a/src/mongo/s/commands/cluster_kill_op.cpp b/src/mongo/s/commands/cluster_kill_op.cpp index 9ede8a5661a..bfeb02ea493 100644 --- a/src/mongo/s/commands/cluster_kill_op.cpp +++ b/src/mongo/s/commands/cluster_kill_op.cpp @@ -103,7 +103,7 @@ public: // Will throw if shard id is not found auto shardStatus = grid.shardRegistry()->getShard(opCtx, shardIdent); if (!shardStatus.isOK()) { - return appendCommandStatus(result, shardStatus.getStatus()); + return CommandHelpers::appendCommandStatus(result, shardStatus.getStatus()); } auto shard = shardStatus.getValue(); diff --git a/src/mongo/s/commands/cluster_list_databases_cmd.cpp b/src/mongo/s/commands/cluster_list_databases_cmd.cpp index 3dbbf2f6e9b..1e0d0c16778 100644 --- a/src/mongo/s/commands/cluster_list_databases_cmd.cpp +++ b/src/mongo/s/commands/cluster_list_databases_cmd.cpp @@ -102,7 +102,7 @@ public: grid.shardRegistry()->getAllShardIds(&shardIds); shardIds.emplace_back(ShardRegistry::kConfigServerShardId); - auto filteredCmd = filterCommandRequestForPassthrough(cmdObj); + auto filteredCmd = CommandHelpers::filterCommandRequestForPassthrough(cmdObj); for (const ShardId& shardId : shardIds) { const auto shardStatus = grid.shardRegistry()->getShard(opCtx, shardId); diff --git a/src/mongo/s/commands/cluster_map_reduce_cmd.cpp b/src/mongo/s/commands/cluster_map_reduce_cmd.cpp index 88ad5925067..8b1376ad3aa 100644 --- a/src/mongo/s/commands/cluster_map_reduce_cmd.cpp +++ b/src/mongo/s/commands/cluster_map_reduce_cmd.cpp @@ -93,7 +93,7 @@ BSONObj fixForShards(const BSONObj& orig, b.append(e); } else if (fn == "out" || fn == "finalize" || fn == "writeConcern") { // We don't want to copy these - } else if (!Command::isGenericArgument(fn)) { + } else if (!CommandHelpers::isGenericArgument(fn)) { badShardedField = fn.toString(); return BSONObj(); } @@ -160,7 +160,7 @@ public: } std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsCollectionRequired(dbname, cmdObj).ns(); + return CommandHelpers::parseNsCollectionRequired(dbname, cmdObj).ns(); } bool supportsWriteConcern(const BSONObj& cmd) const override { @@ -283,7 +283,8 @@ public: ShardConnection conn(inputRoutingInfo.primary()->getConnString(), ""); BSONObj res; - bool ok = conn->runCommand(dbname, filterCommandRequestForPassthrough(cmdObj), res); + bool ok = conn->runCommand( + dbname, CommandHelpers::filterCommandRequestForPassthrough(cmdObj), res); conn.done(); if (auto wcErrorElem = res["writeConcernError"]) { @@ -291,7 +292,7 @@ public: inputRoutingInfo.primary()->getId(), wcErrorElem, result); } - result.appendElementsUnique(filterCommandReplyForPassthrough(res)); + result.appendElementsUnique(CommandHelpers::filterCommandReplyForPassthrough(res)); return ok; } @@ -493,7 +494,7 @@ public: auto scopedDistLock = catalogClient->getDistLockManager()->lock( opCtx, outputCollNss.ns(), "mr-post-process", kNoDistLockTimeout); if (!scopedDistLock.isOK()) { - return appendCommandStatus(result, scopedDistLock.getStatus()); + return CommandHelpers::appendCommandStatus(result, scopedDistLock.getStatus()); } BSONObj finalCmdObj = finalCmd.obj(); diff --git a/src/mongo/s/commands/cluster_merge_chunks_cmd.cpp b/src/mongo/s/commands/cluster_merge_chunks_cmd.cpp index db51420bf21..463203917df 100644 --- a/src/mongo/s/commands/cluster_merge_chunks_cmd.cpp +++ b/src/mongo/s/commands/cluster_merge_chunks_cmd.cpp @@ -73,7 +73,7 @@ public: } std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsFullyQualified(dbname, cmdObj); + return CommandHelpers::parseNsFullyQualified(dbname, cmdObj); } bool adminOnly() const override { @@ -167,7 +167,7 @@ public: const auto shardStatus = Grid::get(opCtx)->shardRegistry()->getShard(opCtx, firstChunk->getShardId()); if (!shardStatus.isOK()) { - return appendCommandStatus( + return CommandHelpers::appendCommandStatus( result, Status(ErrorCodes::ShardNotFound, str::stream() << "Can't find shard for chunk: " << firstChunk->toString())); @@ -179,7 +179,7 @@ public: Grid::get(opCtx)->catalogCache()->onStaleConfigError(std::move(routingInfo)); - filterCommandReplyForPassthrough(remoteResult, &result); + CommandHelpers::filterCommandReplyForPassthrough(remoteResult, &result); return ok; } diff --git a/src/mongo/s/commands/cluster_move_chunk_cmd.cpp b/src/mongo/s/commands/cluster_move_chunk_cmd.cpp index 0af81436129..954da092625 100644 --- a/src/mongo/s/commands/cluster_move_chunk_cmd.cpp +++ b/src/mongo/s/commands/cluster_move_chunk_cmd.cpp @@ -88,7 +88,7 @@ public: } std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsFullyQualified(dbname, cmdObj); + return CommandHelpers::parseNsFullyQualified(dbname, cmdObj); } bool errmsgRun(OperationContext* opCtx, @@ -122,7 +122,8 @@ public: << toString << "' because that shard does not exist"); log() << msg; - return appendCommandStatus(result, Status(ErrorCodes::ShardNotFound, msg)); + return CommandHelpers::appendCommandStatus(result, + Status(ErrorCodes::ShardNotFound, msg)); } const auto to = toStatus.getValue(); diff --git a/src/mongo/s/commands/cluster_move_primary_cmd.cpp b/src/mongo/s/commands/cluster_move_primary_cmd.cpp index 4f244b9d67e..a15aed40fd4 100644 --- a/src/mongo/s/commands/cluster_move_primary_cmd.cpp +++ b/src/mongo/s/commands/cluster_move_primary_cmd.cpp @@ -116,11 +116,11 @@ public: opCtx, ReadPreferenceSetting(ReadPreference::PrimaryOnly), "admin", - Command::appendMajorityWriteConcern( - Command::appendPassthroughFields(cmdObj, configMovePrimaryRequest.toBSON())), + CommandHelpers::appendMajorityWriteConcern( + CommandHelpers::appendPassthroughFields(cmdObj, configMovePrimaryRequest.toBSON())), Shard::RetryPolicy::kIdempotent)); - Command::filterCommandReplyForPassthrough(cmdResponse.response, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResponse.response, &result); return true; } diff --git a/src/mongo/s/commands/cluster_multicast.cpp b/src/mongo/s/commands/cluster_multicast.cpp index 56af56e255a..3a92b006b9b 100644 --- a/src/mongo/s/commands/cluster_multicast.cpp +++ b/src/mongo/s/commands/cluster_multicast.cpp @@ -132,7 +132,7 @@ public: { BSONObjBuilder subbob(bob.subobjStart(host.toString())); - if (appendCommandStatus(subbob, response.status)) { + if (CommandHelpers::appendCommandStatus(subbob, response.status)) { subbob.append("data", response.data); subbob.append("metadata", response.metadata); if (response.elapsedMillis) { diff --git a/src/mongo/s/commands/cluster_pipeline_cmd.cpp b/src/mongo/s/commands/cluster_pipeline_cmd.cpp index e433c6d252d..90a641dfd97 100644 --- a/src/mongo/s/commands/cluster_pipeline_cmd.cpp +++ b/src/mongo/s/commands/cluster_pipeline_cmd.cpp @@ -70,8 +70,8 @@ public: const std::string& dbname, const BSONObj& cmdObj, BSONObjBuilder& result) override { - return appendCommandStatus(result, - _runAggCommand(opCtx, dbname, cmdObj, boost::none, &result)); + return CommandHelpers::appendCommandStatus( + result, _runAggCommand(opCtx, dbname, cmdObj, boost::none, &result)); } Status explain(OperationContext* opCtx, diff --git a/src/mongo/s/commands/cluster_plan_cache_cmd.cpp b/src/mongo/s/commands/cluster_plan_cache_cmd.cpp index 748459fe163..76a4a7af53f 100644 --- a/src/mongo/s/commands/cluster_plan_cache_cmd.cpp +++ b/src/mongo/s/commands/cluster_plan_cache_cmd.cpp @@ -71,7 +71,7 @@ public: } std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsCollectionRequired(dbname, cmdObj).ns(); + return CommandHelpers::parseNsCollectionRequired(dbname, cmdObj).ns(); } Status checkAuthForCommand(Client* client, const std::string& dbname, const BSONObj& cmdObj) { @@ -112,7 +112,7 @@ bool ClusterPlanCacheCmd::run(OperationContext* opCtx, const std::string& dbName, const BSONObj& cmdObj, BSONObjBuilder& result) { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); // Dispatch command to all the shards. // Targeted shard commands are generally data-dependent but plan cache @@ -121,7 +121,7 @@ bool ClusterPlanCacheCmd::run(OperationContext* opCtx, const BSONObj query; Strategy::commandOp(opCtx, dbName, - filterCommandRequestForPassthrough(cmdObj), + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), nss.ns(), query, CollationSpec::kSimpleSpec, @@ -137,7 +137,7 @@ bool ClusterPlanCacheCmd::run(OperationContext* opCtx, // XXX: In absence of sensible aggregation strategy, // promote first shard's result to top level. if (i == results.begin()) { - filterCommandReplyForPassthrough(cmdResult.result, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResult.result, &result); clusterCmdResult = cmdResult.result["ok"].trueValue(); } diff --git a/src/mongo/s/commands/cluster_remove_shard_cmd.cpp b/src/mongo/s/commands/cluster_remove_shard_cmd.cpp index f07e886ce86..4137466e5a5 100644 --- a/src/mongo/s/commands/cluster_remove_shard_cmd.cpp +++ b/src/mongo/s/commands/cluster_remove_shard_cmd.cpp @@ -84,12 +84,12 @@ public: opCtx, ReadPreferenceSetting(ReadPreference::PrimaryOnly), "admin", - Command::appendMajorityWriteConcern( - Command::appendPassthroughFields(cmdObj, BSON("_configsvrRemoveShard" << target))), + CommandHelpers::appendMajorityWriteConcern(CommandHelpers::appendPassthroughFields( + cmdObj, BSON("_configsvrRemoveShard" << target))), Shard::RetryPolicy::kIdempotent)); uassertStatusOK(cmdResponseStatus.commandStatus); - Command::filterCommandReplyForPassthrough(cmdResponseStatus.response, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResponseStatus.response, &result); return true; } diff --git a/src/mongo/s/commands/cluster_reset_error_cmd.cpp b/src/mongo/s/commands/cluster_reset_error_cmd.cpp index 8fbe4c7a78b..50ba801ba37 100644 --- a/src/mongo/s/commands/cluster_reset_error_cmd.cpp +++ b/src/mongo/s/commands/cluster_reset_error_cmd.cpp @@ -75,7 +75,8 @@ public: BSONObj res; // Don't care about result from shards. - conn->runCommand(dbname, filterCommandRequestForPassthrough(cmdObj), res); + conn->runCommand( + dbname, CommandHelpers::filterCommandRequestForPassthrough(cmdObj), res); conn.done(); } diff --git a/src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp b/src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp index a26c773f78a..4558c3a707f 100644 --- a/src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp +++ b/src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp @@ -98,7 +98,7 @@ public: opCtx, ReadPreferenceSetting{ReadPreference::PrimaryOnly}, dbname, - Command::appendMajorityWriteConcern(Command::appendPassthroughFields( + CommandHelpers::appendMajorityWriteConcern(CommandHelpers::appendPassthroughFields( cmdObj, BSON("setFeatureCompatibilityVersion" << version))), Shard::RetryPolicy::kIdempotent)); uassertStatusOK(response.commandStatus); diff --git a/src/mongo/s/commands/cluster_shard_collection_cmd.cpp b/src/mongo/s/commands/cluster_shard_collection_cmd.cpp index 2ec79a764a0..0c9df731b06 100644 --- a/src/mongo/s/commands/cluster_shard_collection_cmd.cpp +++ b/src/mongo/s/commands/cluster_shard_collection_cmd.cpp @@ -101,7 +101,7 @@ public: } std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsFullyQualified(dbname, cmdObj); + return CommandHelpers::parseNsFullyQualified(dbname, cmdObj); } bool run(OperationContext* opCtx, @@ -129,11 +129,11 @@ public: opCtx, ReadPreferenceSetting(ReadPreference::PrimaryOnly), "admin", - Command::appendMajorityWriteConcern( - Command::appendPassthroughFields(cmdObj, configShardCollRequest.toBSON())), + CommandHelpers::appendMajorityWriteConcern( + CommandHelpers::appendPassthroughFields(cmdObj, configShardCollRequest.toBSON())), Shard::RetryPolicy::kIdempotent)); - Command::filterCommandReplyForPassthrough(cmdResponse.response, &result); + CommandHelpers::filterCommandReplyForPassthrough(cmdResponse.response, &result); return true; } diff --git a/src/mongo/s/commands/cluster_split_cmd.cpp b/src/mongo/s/commands/cluster_split_cmd.cpp index e29e1a7c412..44f8388cfa1 100644 --- a/src/mongo/s/commands/cluster_split_cmd.cpp +++ b/src/mongo/s/commands/cluster_split_cmd.cpp @@ -120,7 +120,7 @@ public: } std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsFullyQualified(dbname, cmdObj); + return CommandHelpers::parseNsFullyQualified(dbname, cmdObj); } bool errmsgRun(OperationContext* opCtx, diff --git a/src/mongo/s/commands/cluster_user_management_commands.cpp b/src/mongo/s/commands/cluster_user_management_commands.cpp index d82af362143..24503042928 100644 --- a/src/mongo/s/commands/cluster_user_management_commands.cpp +++ b/src/mongo/s/commands/cluster_user_management_commands.cpp @@ -91,7 +91,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { return Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); } virtual void redactForLogging(mutablebson::Document* cmdObj) { @@ -130,10 +134,14 @@ public: auth::CreateOrUpdateUserArgs args; Status status = auth::parseCreateOrUpdateUserCommands(cmdObj, getName(), dbname, &args); if (!status.isOK()) { - return appendCommandStatus(result, status); + return CommandHelpers::appendCommandStatus(result, status); } const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -178,10 +186,14 @@ public: UserName userName; Status status = auth::parseAndValidateDropUserCommand(cmdObj, dbname, &userName); if (!status.isOK()) { - return appendCommandStatus(result, status); + return CommandHelpers::appendCommandStatus(result, status); } const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -220,7 +232,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -263,10 +279,14 @@ public: Status status = auth::parseRolePossessionManipulationCommands( cmdObj, getName(), dbname, &userNameString, &roles); if (!status.isOK()) { - return appendCommandStatus(result, status); + return CommandHelpers::appendCommandStatus(result, status); } const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -309,10 +329,14 @@ public: Status status = auth::parseRolePossessionManipulationCommands( cmdObj, getName(), dbname, &userNameString, &unusedRoles); if (!status.isOK()) { - return appendCommandStatus(result, status); + return CommandHelpers::appendCommandStatus(result, status); } const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -355,7 +379,7 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { return Grid::get(opCtx)->catalogClient()->runUserManagementReadCommand( - opCtx, dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, dbname, CommandHelpers::filterCommandRequestForPassthrough(cmdObj), &result); } } cmdUsersInfo; @@ -388,7 +412,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { return Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); } } cmdCreateRole; @@ -421,7 +449,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -460,7 +492,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -499,7 +535,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -538,7 +578,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -577,7 +621,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -619,7 +667,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -662,7 +714,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { const bool ok = Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); AuthorizationManager* authzManager = getGlobalAuthorizationManager(); invariant(authzManager); @@ -705,7 +761,7 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { return Grid::get(opCtx)->catalogClient()->runUserManagementReadCommand( - opCtx, dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, dbname, CommandHelpers::filterCommandRequestForPassthrough(cmdObj), &result); } } cmdRolesInfo; @@ -791,7 +847,11 @@ public: const BSONObj& cmdObj, BSONObjBuilder& result) { return Grid::get(opCtx)->catalogClient()->runUserManagementWriteCommand( - opCtx, getName(), dbname, filterCommandRequestForPassthrough(cmdObj), &result); + opCtx, + getName(), + dbname, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + &result); } } cmdMergeAuthzCollections; diff --git a/src/mongo/s/commands/commands_public.cpp b/src/mongo/s/commands/commands_public.cpp index cfedc3a8f2e..cbc8d772b79 100644 --- a/src/mongo/s/commands/commands_public.cpp +++ b/src/mongo/s/commands/commands_public.cpp @@ -90,15 +90,15 @@ bool cursorCommandPassthrough(OperationContext* opCtx, BSONObjBuilder* out) { const auto shardStatus = Grid::get(opCtx)->shardRegistry()->getShard(opCtx, shardId); if (!shardStatus.isOK()) { - return Command::appendCommandStatus(*out, shardStatus.getStatus()); + return CommandHelpers::appendCommandStatus(*out, shardStatus.getStatus()); } const auto shard = shardStatus.getValue(); ScopedDbConnection conn(shard->getConnString()); auto cursor = conn->query(str::stream() << dbName << ".$cmd", - Command::filterCommandRequestForPassthrough(cmdObj), + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), /* nToReturn=*/-1); if (!cursor || !cursor->more()) { - return Command::appendCommandStatus( + return CommandHelpers::appendCommandStatus( *out, {ErrorCodes::OperationFailed, "failed to read command response from shard"}); } BSONObj response = cursor->nextSafe().getOwned(); @@ -108,7 +108,7 @@ bool cursorCommandPassthrough(OperationContext* opCtx, throw StaleConfigException("command failed because of stale config", response); } if (!status.isOK()) { - return Command::appendCommandStatus(*out, status); + return CommandHelpers::appendCommandStatus(*out, status); } StatusWith<BSONObj> transformedResponse = @@ -120,9 +120,9 @@ bool cursorCommandPassthrough(OperationContext* opCtx, Grid::get(opCtx)->getExecutorPool()->getArbitraryExecutor(), Grid::get(opCtx)->getCursorManager()); if (!transformedResponse.isOK()) { - return Command::appendCommandStatus(*out, transformedResponse.getStatus()); + return CommandHelpers::appendCommandStatus(*out, transformedResponse.getStatus()); } - Command::filterCommandReplyForPassthrough(transformedResponse.getValue(), out); + CommandHelpers::filterCommandReplyForPassthrough(transformedResponse.getValue(), out); return true; } @@ -177,7 +177,8 @@ protected: ShardConnection conn(shard->getConnString(), ""); BSONObj res; - bool ok = conn->runCommand(db, filterCommandRequestForPassthrough(cmdObj), res); + bool ok = + conn->runCommand(db, CommandHelpers::filterCommandRequestForPassthrough(cmdObj), res); conn.done(); // First append the properly constructed writeConcernError. It will then be skipped @@ -185,7 +186,7 @@ protected: if (auto wcErrorElem = res["writeConcernError"]) { appendWriteConcernErrorToCmdResponse(shard->getId(), wcErrorElem, result); } - result.appendElementsUnique(filterCommandReplyForPassthrough(res)); + result.appendElementsUnique(CommandHelpers::filterCommandReplyForPassthrough(res)); return ok; } }; @@ -212,7 +213,7 @@ protected: // Here, we first filter the command before appending an UNSHARDED shardVersion, because // "shardVersion" is one of the fields that gets filtered out. - BSONObj filteredCmdObj(Command::filterCommandRequestForPassthrough(cmdObj)); + BSONObj filteredCmdObj(CommandHelpers::filterCommandRequestForPassthrough(cmdObj)); BSONObj filteredCmdObjWithVersion( appendShardVersion(filteredCmdObj, ChunkVersion::UNSHARDED())); @@ -234,7 +235,7 @@ protected: primaryShardId, commandResponse.response["writeConcernError"], result); } result.appendElementsUnique( - filterCommandReplyForPassthrough(std::move(commandResponse.response))); + CommandHelpers::filterCommandReplyForPassthrough(std::move(commandResponse.response))); return true; } @@ -271,16 +272,16 @@ public: const BSONObj& cmdObj, std::string& errmsg, BSONObjBuilder& output) override { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); LOG(1) << "dropIndexes: " << nss << " cmd:" << redact(cmdObj); - auto shardResponses = uassertStatusOK( - scatterGatherOnlyVersionIfUnsharded(opCtx, - dbName, - nss, - filterCommandRequestForPassthrough(cmdObj), - ReadPreferenceSetting::get(opCtx), - Shard::RetryPolicy::kNotIdempotent)); + auto shardResponses = uassertStatusOK(scatterGatherOnlyVersionIfUnsharded( + opCtx, + dbName, + nss, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + ReadPreferenceSetting::get(opCtx), + Shard::RetryPolicy::kNotIdempotent)); return appendRawResponses( opCtx, &errmsg, &output, std::move(shardResponses), {ErrorCodes::NamespaceNotFound}); } @@ -315,18 +316,18 @@ public: const BSONObj& cmdObj, std::string& errmsg, BSONObjBuilder& output) override { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); LOG(1) << "createIndexes: " << nss << " cmd:" << redact(cmdObj); uassertStatusOK(createShardDatabase(opCtx, dbName)); - auto shardResponses = uassertStatusOK( - scatterGatherOnlyVersionIfUnsharded(opCtx, - dbName, - nss, - filterCommandRequestForPassthrough(cmdObj), - ReadPreferenceSetting::get(opCtx), - Shard::RetryPolicy::kNoRetry)); + auto shardResponses = uassertStatusOK(scatterGatherOnlyVersionIfUnsharded( + opCtx, + dbName, + nss, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + ReadPreferenceSetting::get(opCtx), + Shard::RetryPolicy::kNoRetry)); return appendRawResponses(opCtx, &errmsg, &output, @@ -364,16 +365,16 @@ public: const BSONObj& cmdObj, std::string& errmsg, BSONObjBuilder& output) override { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); LOG(1) << "reIndex: " << nss << " cmd:" << redact(cmdObj); - auto shardResponses = uassertStatusOK( - scatterGatherOnlyVersionIfUnsharded(opCtx, - dbName, - nss, - filterCommandRequestForPassthrough(cmdObj), - ReadPreferenceSetting::get(opCtx), - Shard::RetryPolicy::kNoRetry)); + auto shardResponses = uassertStatusOK(scatterGatherOnlyVersionIfUnsharded( + opCtx, + dbName, + nss, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + ReadPreferenceSetting::get(opCtx), + Shard::RetryPolicy::kNoRetry)); return appendRawResponses( opCtx, &errmsg, &output, std::move(shardResponses), {ErrorCodes::NamespaceNotFound}); } @@ -394,7 +395,7 @@ public: virtual Status checkAuthForCommand(Client* client, const std::string& dbname, const BSONObj& cmdObj) { - const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); return AuthorizationSession::get(client)->checkAuthForCollMod(nss, cmdObj, true); } @@ -407,16 +408,16 @@ public: const BSONObj& cmdObj, std::string& errmsg, BSONObjBuilder& output) override { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); LOG(1) << "collMod: " << nss << " cmd:" << redact(cmdObj); - auto shardResponses = uassertStatusOK( - scatterGatherOnlyVersionIfUnsharded(opCtx, - dbName, - nss, - filterCommandRequestForPassthrough(cmdObj), - ReadPreferenceSetting::get(opCtx), - Shard::RetryPolicy::kNoRetry)); + auto shardResponses = uassertStatusOK(scatterGatherOnlyVersionIfUnsharded( + opCtx, + dbName, + nss, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + ReadPreferenceSetting::get(opCtx), + Shard::RetryPolicy::kNoRetry)); return appendRawResponses( opCtx, &errmsg, &output, std::move(shardResponses), {ErrorCodes::NamespaceNotFound}); } @@ -442,7 +443,7 @@ public: const string& dbName, const BSONObj& cmdObj, BSONObjBuilder& output) { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); auto routingInfo = uassertStatusOK(Grid::get(opCtx)->catalogCache()->getCollectionRoutingInfo(opCtx, nss)); @@ -456,7 +457,7 @@ public: const BSONObj query; Strategy::commandOp(opCtx, dbName, - filterCommandRequestForPassthrough(cmdObj), + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), cm->getns(), query, CollationSpec::kSimpleSpec, @@ -505,7 +506,7 @@ public: Status checkAuthForCommand(Client* client, const std::string& dbname, const BSONObj& cmdObj) override { - const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); return AuthorizationSession::get(client)->checkAuthForCreate(nss, cmdObj, true); } @@ -640,7 +641,7 @@ public: !fromDbInfo.shardingEnabled()); BSONObjBuilder b; - BSONForEach(e, filterCommandRequestForPassthrough(cmdObj)) { + BSONForEach(e, CommandHelpers::filterCommandRequestForPassthrough(cmdObj)) { if (strcmp(e.fieldName(), "fromhost") != 0) { b.append(e); } @@ -677,7 +678,7 @@ public: const string& dbName, const BSONObj& cmdObj, BSONObjBuilder& result) override { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); auto routingInfo = uassertStatusOK(Grid::get(opCtx)->catalogCache()->getCollectionRoutingInfo(opCtx, nss)); @@ -713,7 +714,8 @@ public: BSONObj res; { ScopedDbConnection conn(shard->getConnString()); - if (!conn->runCommand(dbName, filterCommandRequestForPassthrough(cmdObj), res)) { + if (!conn->runCommand( + dbName, CommandHelpers::filterCommandRequestForPassthrough(cmdObj), res)) { if (!res["code"].eoo()) { result.append(res["code"]); } @@ -837,7 +839,7 @@ public: DataSizeCmd() : PublicGridCommand("dataSize", "datasize") {} std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsFullyQualified(dbname, cmdObj); + return CommandHelpers::parseNsFullyQualified(dbname, cmdObj); } void addRequiredPrivileges(const std::string& dbname, @@ -900,11 +902,12 @@ public: ScopedDbConnection conn(shardStatus.getValue()->getConnString()); BSONObj res; - bool ok = conn->runCommand(dbName, filterCommandRequestForPassthrough(cmdObj), res); + bool ok = conn->runCommand( + dbName, CommandHelpers::filterCommandRequestForPassthrough(cmdObj), res); conn.done(); if (!ok) { - filterCommandReplyForPassthrough(res, &result); + CommandHelpers::filterCommandReplyForPassthrough(res, &result); return false; } @@ -938,7 +941,7 @@ public: } std::string parseNs(const std::string& dbname, const BSONObj& cmdObj) const override { - return parseNsCollectionRequired(dbname, cmdObj).ns(); + return CommandHelpers::parseNsCollectionRequired(dbname, cmdObj).ns(); } } convertToCappedCmd; @@ -1041,7 +1044,7 @@ public: } std::string parseNs(const string& dbname, const BSONObj& cmdObj) const override { - return parseNsFullyQualified(dbname, cmdObj); + return CommandHelpers::parseNsFullyQualified(dbname, cmdObj); } bool run(OperationContext* opCtx, @@ -1082,7 +1085,7 @@ public: const string& dbName, const BSONObj& cmdObj, BSONObjBuilder& result) override { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); auto query = getQuery(cmdObj); @@ -1110,16 +1113,16 @@ public: uassertStatusOK(Grid::get(opCtx)->catalogCache()->getCollectionRoutingInfo(opCtx, nss)); BSONObj viewDefinition; - auto swShardResponses = - scatterGatherVersionedTargetByRoutingTable(opCtx, - dbName, - nss, - filterCommandRequestForPassthrough(cmdObj), - ReadPreferenceSetting::get(opCtx), - Shard::RetryPolicy::kIdempotent, - query, - collation, - &viewDefinition); + auto swShardResponses = scatterGatherVersionedTargetByRoutingTable( + opCtx, + dbName, + nss, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), + ReadPreferenceSetting::get(opCtx), + Shard::RetryPolicy::kIdempotent, + query, + collation, + &viewDefinition); if (ErrorCodes::CommandOnShardedViewNotSupportedOnMongod == swShardResponses.getStatus()) { uassert(ErrorCodes::InternalError, @@ -1131,30 +1134,30 @@ public: auto parsedDistinct = ParsedDistinct::parse( opCtx, resolvedView.getNamespace(), cmdObj, ExtensionsCallbackNoop(), true); if (!parsedDistinct.isOK()) { - return appendCommandStatus(result, parsedDistinct.getStatus()); + return CommandHelpers::appendCommandStatus(result, parsedDistinct.getStatus()); } auto aggCmdOnView = parsedDistinct.getValue().asAggregationCommand(); if (!aggCmdOnView.isOK()) { - return appendCommandStatus(result, aggCmdOnView.getStatus()); + return CommandHelpers::appendCommandStatus(result, aggCmdOnView.getStatus()); } auto aggRequestOnView = AggregationRequest::parseFromBSON(nss, aggCmdOnView.getValue()); if (!aggRequestOnView.isOK()) { - return appendCommandStatus(result, aggRequestOnView.getStatus()); + return CommandHelpers::appendCommandStatus(result, aggRequestOnView.getStatus()); } auto resolvedAggRequest = resolvedView.asExpandedViewAggregation(aggRequestOnView.getValue()); auto resolvedAggCmd = resolvedAggRequest.serializeToCommandObj().toBson(); - BSONObj aggResult = Command::runCommandDirectly( + BSONObj aggResult = CommandHelpers::runCommandDirectly( opCtx, OpMsgRequest::fromDBAndBody(dbName, std::move(resolvedAggCmd))); ViewResponseFormatter formatter(aggResult); auto formatStatus = formatter.appendAsDistinctResponse(&result); if (!formatStatus.isOK()) { - return appendCommandStatus(result, formatStatus); + return CommandHelpers::appendCommandStatus(result, formatStatus); } return true; } @@ -1201,7 +1204,7 @@ public: const BSONObj& cmdObj, ExplainOptions::Verbosity verbosity, BSONObjBuilder* out) const { - const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); // Extract the targeting query. BSONObj targetingQuery; @@ -1346,7 +1349,7 @@ public: vector<Strategy::CommandResult> results; Strategy::commandOp(opCtx, dbName, - filterCommandRequestForPassthrough(cmdObj), + CommandHelpers::filterCommandRequestForPassthrough(cmdObj), nss.ns(), finder, CollationSpec::kSimpleSpec, @@ -1354,7 +1357,7 @@ public: verify(results.size() == 1); // querying on shard key so should only talk to one shard BSONObj res = results.begin()->result; - filterCommandReplyForPassthrough(res, &result); + CommandHelpers::filterCommandReplyForPassthrough(res, &result); return res["ok"].trueValue(); } else if (SimpleBSONObjComparator::kInstance.evaluate(cm->getShardKeyPattern().toBSON() == BSON("files_id" << 1 << "n" << 1))) { @@ -1370,7 +1373,7 @@ public: // long as we keep getting more chunks. The end condition is when we go to // look for chunk n and it doesn't exist. This means that the file's last // chunk is n-1, so we return the computed md5 results. - BSONObjBuilder bb(filterCommandRequestForPassthrough(cmdObj)); + BSONObjBuilder bb(CommandHelpers::filterCommandRequestForPassthrough(cmdObj)); bb.appendBool("partialOk", true); bb.append("startAt", n); if (!lastResult.isEmpty()) { @@ -1431,7 +1434,7 @@ public: if (n == nNext) { // no new data means we've reached the end of the file - filterCommandReplyForPassthrough(res, &result); + CommandHelpers::filterCommandReplyForPassthrough(res, &result); return true; } @@ -1487,7 +1490,7 @@ public: "http://dochub.mongodb.org/core/geoNear-deprecation."; } - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); auto routingInfo = @@ -1516,7 +1519,8 @@ public: vector<AsyncRequestsSender::Request> requests; BSONArrayBuilder shardArray; for (const ShardId& shardId : shardIds) { - requests.emplace_back(shardId, filterCommandRequestForPassthrough(cmdObj)); + requests.emplace_back(shardId, + CommandHelpers::filterCommandRequestForPassthrough(cmdObj)); shardArray.append(shardId.toString()); } @@ -1682,7 +1686,7 @@ public: // Check for the listIndexes ActionType on the database, or find on system.indexes for pre // 3.0 systems. - const NamespaceString ns(parseNsCollectionRequired(dbname, cmdObj)); + const NamespaceString ns(CommandHelpers::parseNsCollectionRequired(dbname, cmdObj)); if (authzSession->isAuthorizedForActionsOnResource(ResourcePattern::forExactNamespace(ns), ActionType::listIndexes) || @@ -1705,7 +1709,7 @@ public: const string& dbName, const BSONObj& cmdObj, BSONObjBuilder& result) final { - const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj)); + const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj)); const auto routingInfo = uassertStatusOK(Grid::get(opCtx)->catalogCache()->getCollectionRoutingInfo(opCtx, nss)); diff --git a/src/mongo/s/commands/pipeline_s.cpp b/src/mongo/s/commands/pipeline_s.cpp index 3aef12ca6c2..45662b6aa55 100644 --- a/src/mongo/s/commands/pipeline_s.cpp +++ b/src/mongo/s/commands/pipeline_s.cpp @@ -368,7 +368,7 @@ BSONObj PipelineS::establishMergingMongosCursor( responseBuilder.done(clusterCursorId, requestedNss.ns()); - Command::appendCommandStatus(cursorResponse, Status::OK()); + CommandHelpers::appendCommandStatus(cursorResponse, Status::OK()); return cursorResponse.obj(); } diff --git a/src/mongo/s/commands/strategy.cpp b/src/mongo/s/commands/strategy.cpp index 0a66edcbcb0..b10366b5a1e 100644 --- a/src/mongo/s/commands/strategy.cpp +++ b/src/mongo/s/commands/strategy.cpp @@ -164,7 +164,7 @@ void execCommandClient(OperationContext* opCtx, help << "help for: " << c->getName() << " "; c->help(help); result.append("help", help.str()); - Command::appendCommandStatus(result, true, ""); + CommandHelpers::appendCommandStatus(result, true, ""); return; } @@ -176,7 +176,7 @@ void execCommandClient(OperationContext* opCtx, Status status = Command::checkAuthorization(c, opCtx, request); if (!status.isOK()) { - Command::appendCommandStatus(result, status); + CommandHelpers::appendCommandStatus(result, status); return; } @@ -189,7 +189,7 @@ void execCommandClient(OperationContext* opCtx, StatusWith<WriteConcernOptions> wcResult = WriteConcernOptions::extractWCFromCommand(request.body, dbname); if (!wcResult.isOK()) { - Command::appendCommandStatus(result, wcResult.getStatus()); + CommandHelpers::appendCommandStatus(result, wcResult.getStatus()); return; } @@ -198,7 +198,7 @@ void execCommandClient(OperationContext* opCtx, // This command doesn't do writes so it should not be passed a writeConcern. // If we did not use the default writeConcern, one was provided when it shouldn't have // been by the user. - Command::appendCommandStatus( + CommandHelpers::appendCommandStatus( result, Status(ErrorCodes::InvalidOptions, "Command does not support writeConcern")); return; } @@ -210,7 +210,7 @@ void execCommandClient(OperationContext* opCtx, auto metadataStatus = processCommandMetadata(opCtx, request.body); if (!metadataStatus.isOK()) { - Command::appendCommandStatus(result, metadataStatus); + CommandHelpers::appendCommandStatus(result, metadataStatus); return; } @@ -228,7 +228,7 @@ void execCommandClient(OperationContext* opCtx, if (!ok) { c->incrementCommandsFailed(); } - Command::appendCommandStatus(result, ok); + CommandHelpers::appendCommandStatus(result, ok); } void runCommand(OperationContext* opCtx, const OpMsgRequest& request, BSONObjBuilder&& builder) { @@ -245,10 +245,10 @@ void runCommand(OperationContext* opCtx, const OpMsgRequest& request, BSONObjBui } auto const commandName = request.getCommandName(); - auto const command = Command::findCommand(commandName); + auto const command = CommandHelpers::findCommand(commandName); if (!command) { ON_BLOCK_EXIT([opCtx, &builder] { appendRequiredFieldsToResponse(opCtx, &builder); }); - Command::appendCommandStatus( + CommandHelpers::appendCommandStatus( builder, {ErrorCodes::CommandNotFound, str::stream() << "no such cmd: " << commandName}); globalCommandRegistry()->incrementUnknownCommands(); @@ -291,7 +291,7 @@ void runCommand(OperationContext* opCtx, const OpMsgRequest& request, BSONObjBui ON_BLOCK_EXIT([opCtx, &builder] { appendRequiredFieldsToResponse(opCtx, &builder); }); builder.resetToEmpty(); command->incrementCommandsFailed(); - Command::appendCommandStatus(builder, e.toStatus()); + CommandHelpers::appendCommandStatus(builder, e.toStatus()); LastError::get(opCtx->getClient()).setLastError(e.code(), e.reason()); return; } @@ -412,7 +412,7 @@ DbResponse Strategy::clientCommand(OperationContext* opCtx, const Message& m) { LOG(1) << "Exception thrown while parsing command " << causedBy(redact(ex)); reply->reset(); auto bob = reply->getInPlaceReplyBuilder(0); - Command::appendCommandStatus(bob, ex.toStatus()); + CommandHelpers::appendCommandStatus(bob, ex.toStatus()); appendRequiredFieldsToResponse(opCtx, &bob); return; // From lambda. Don't try executing if parsing failed. @@ -428,7 +428,7 @@ DbResponse Strategy::clientCommand(OperationContext* opCtx, const Message& m) { reply->reset(); auto bob = reply->getInPlaceReplyBuilder(0); - Command::appendCommandStatus(bob, ex.toStatus()); + CommandHelpers::appendCommandStatus(bob, ex.toStatus()); appendRequiredFieldsToResponse(opCtx, &bob); } }(); |