summaryrefslogtreecommitdiff
path: root/src/mongo/s/commands
diff options
context:
space:
mode:
authorBilly Donahue <billy.donahue@mongodb.com>2018-01-10 17:09:22 -0500
committerBilly Donahue <billy.donahue@mongodb.com>2018-01-16 13:52:44 -0500
commita6e45f0e35724ae7958e31fc141c89afcefe4d33 (patch)
tree5ac0bf28fc1b977078845cbff966ff3427cfaa92 /src/mongo/s/commands
parent1378f8ec42068913c5bdc5927bbe86d5aed08814 (diff)
downloadmongo-a6e45f0e35724ae7958e31fc141c89afcefe4d33.tar.gz
SERVER-32646 CommandHelpers
Diffstat (limited to 'src/mongo/s/commands')
-rw-r--r--src/mongo/s/commands/cluster_add_shard_cmd.cpp6
-rw-r--r--src/mongo/s/commands/cluster_aggregate.cpp10
-rw-r--r--src/mongo/s/commands/cluster_commands_helpers.cpp20
-rw-r--r--src/mongo/s/commands/cluster_control_balancer_cmd.cpp2
-rw-r--r--src/mongo/s/commands/cluster_count_cmd.cpp16
-rw-r--r--src/mongo/s/commands/cluster_current_op.cpp2
-rw-r--r--src/mongo/s/commands/cluster_db_stats_cmd.cpp14
-rw-r--r--src/mongo/s/commands/cluster_drop_cmd.cpp6
-rw-r--r--src/mongo/s/commands/cluster_drop_database_cmd.cpp6
-rw-r--r--src/mongo/s/commands/cluster_enable_sharding_cmd.cpp6
-rw-r--r--src/mongo/s/commands/cluster_explain.cpp6
-rw-r--r--src/mongo/s/commands/cluster_explain_cmd.cpp12
-rw-r--r--src/mongo/s/commands/cluster_find_and_modify_cmd.cpp10
-rw-r--r--src/mongo/s/commands/cluster_find_cmd.cpp19
-rw-r--r--src/mongo/s/commands/cluster_get_last_error_cmd.cpp12
-rw-r--r--src/mongo/s/commands/cluster_get_shard_version_cmd.cpp2
-rw-r--r--src/mongo/s/commands/cluster_getmore_cmd.cpp4
-rw-r--r--src/mongo/s/commands/cluster_index_filter_cmd.cpp4
-rw-r--r--src/mongo/s/commands/cluster_is_master_cmd.cpp5
-rw-r--r--src/mongo/s/commands/cluster_kill_op.cpp2
-rw-r--r--src/mongo/s/commands/cluster_list_databases_cmd.cpp2
-rw-r--r--src/mongo/s/commands/cluster_map_reduce_cmd.cpp11
-rw-r--r--src/mongo/s/commands/cluster_merge_chunks_cmd.cpp6
-rw-r--r--src/mongo/s/commands/cluster_move_chunk_cmd.cpp5
-rw-r--r--src/mongo/s/commands/cluster_move_primary_cmd.cpp6
-rw-r--r--src/mongo/s/commands/cluster_multicast.cpp2
-rw-r--r--src/mongo/s/commands/cluster_pipeline_cmd.cpp4
-rw-r--r--src/mongo/s/commands/cluster_plan_cache_cmd.cpp8
-rw-r--r--src/mongo/s/commands/cluster_remove_shard_cmd.cpp6
-rw-r--r--src/mongo/s/commands/cluster_reset_error_cmd.cpp3
-rw-r--r--src/mongo/s/commands/cluster_set_feature_compatibility_version_cmd.cpp2
-rw-r--r--src/mongo/s/commands/cluster_shard_collection_cmd.cpp8
-rw-r--r--src/mongo/s/commands/cluster_split_cmd.cpp2
-rw-r--r--src/mongo/s/commands/cluster_user_management_commands.cpp102
-rw-r--r--src/mongo/s/commands/commands_public.cpp162
-rw-r--r--src/mongo/s/commands/pipeline_s.cpp2
-rw-r--r--src/mongo/s/commands/strategy.cpp22
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);
}
}();