summaryrefslogtreecommitdiff
path: root/src/mongo/s/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/commands')
-rw-r--r--src/mongo/s/commands/cluster_aggregate.cpp14
-rw-r--r--src/mongo/s/commands/cluster_count_cmd.cpp8
-rw-r--r--src/mongo/s/commands/cluster_distinct_cmd.cpp8
-rw-r--r--src/mongo/s/commands/cluster_explain_cmd.cpp5
-rw-r--r--src/mongo/s/commands/cluster_find_and_modify_cmd.cpp11
-rw-r--r--src/mongo/s/commands/cluster_find_cmd.cpp16
-rw-r--r--src/mongo/s/commands/cluster_pipeline_cmd.cpp5
-rw-r--r--src/mongo/s/commands/cluster_write_cmd.cpp5
8 files changed, 44 insertions, 28 deletions
diff --git a/src/mongo/s/commands/cluster_aggregate.cpp b/src/mongo/s/commands/cluster_aggregate.cpp
index dcbd8074319..1aa3045ea5f 100644
--- a/src/mongo/s/commands/cluster_aggregate.cpp
+++ b/src/mongo/s/commands/cluster_aggregate.cpp
@@ -33,6 +33,7 @@
#include "mongo/s/commands/cluster_aggregate.h"
#include <boost/intrusive_ptr.hpp>
+#include <mongo/rpc/op_msg_rpc_impls.h>
#include "mongo/bson/util/bson_extract.h"
#include "mongo/db/auth/authorization_session.h"
@@ -543,9 +544,12 @@ BSONObj establishMergingMongosCursor(OperationContext* opCtx,
opCtx, Grid::get(opCtx)->getExecutorPool()->getArbitraryExecutor(), std::move(params));
auto cursorState = ClusterCursorManager::CursorState::NotExhausted;
- BSONObjBuilder cursorResponse;
- CursorResponseBuilder responseBuilder(true, &cursorResponse);
+ rpc::OpMsgReplyBuilder replyBuilder;
+ CursorResponseBuilder::Options options;
+ options.isInitialResponse = true;
+
+ CursorResponseBuilder responseBuilder(&replyBuilder, options);
for (long long objCount = 0; objCount < request.getBatchSize(); ++objCount) {
ClusterQueryResult next;
@@ -609,9 +613,11 @@ BSONObj establishMergingMongosCursor(OperationContext* opCtx,
responseBuilder.done(clusterCursorId, requestedNss.ns());
- CommandHelpers::appendSimpleCommandStatus(cursorResponse, true);
+ auto bodyBuilder = replyBuilder.getBodyBuilder();
+ CommandHelpers::appendSimpleCommandStatus(bodyBuilder, true);
+ bodyBuilder.doneFast();
- return cursorResponse.obj();
+ return replyBuilder.releaseBody();
}
/**
diff --git a/src/mongo/s/commands/cluster_count_cmd.cpp b/src/mongo/s/commands/cluster_count_cmd.cpp
index f443c297905..6fdd4a2d0f0 100644
--- a/src/mongo/s/commands/cluster_count_cmd.cpp
+++ b/src/mongo/s/commands/cluster_count_cmd.cpp
@@ -214,7 +214,7 @@ public:
Status explain(OperationContext* opCtx,
const OpMsgRequest& request,
ExplainOptions::Verbosity verbosity,
- BSONObjBuilder* out) const override {
+ rpc::ReplyBuilderInterface* result) const override {
std::string dbname = request.getDatabase().toString();
const BSONObj& cmdObj = request.body;
const NamespaceString nss(parseNs(dbname, cmdObj));
@@ -282,8 +282,9 @@ public:
nsStruct.requestedNss = nss;
nsStruct.executionNss = resolvedAggRequest.getNamespaceString();
+ auto bodyBuilder = result->getBodyBuilder();
return ClusterAggregate::runAggregate(
- opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, out);
+ opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, &bodyBuilder);
}
long long millisElapsed = timer.millis();
@@ -291,12 +292,13 @@ public:
const char* mongosStageName =
ClusterExplain::getStageNameForReadOp(shardResponses.size(), cmdObj);
+ auto bodyBuilder = result->getBodyBuilder();
return ClusterExplain::buildExplainResult(
opCtx,
ClusterExplain::downconvert(opCtx, shardResponses),
mongosStageName,
millisElapsed,
- out);
+ &bodyBuilder);
}
private:
diff --git a/src/mongo/s/commands/cluster_distinct_cmd.cpp b/src/mongo/s/commands/cluster_distinct_cmd.cpp
index 09ab87aa48b..cffde0ec3b0 100644
--- a/src/mongo/s/commands/cluster_distinct_cmd.cpp
+++ b/src/mongo/s/commands/cluster_distinct_cmd.cpp
@@ -86,7 +86,7 @@ public:
Status explain(OperationContext* opCtx,
const OpMsgRequest& opMsgRequest,
ExplainOptions::Verbosity verbosity,
- BSONObjBuilder* out) const override {
+ rpc::ReplyBuilderInterface* result) const override {
std::string dbname = opMsgRequest.getDatabase().toString();
const BSONObj& cmdObj = opMsgRequest.body;
const NamespaceString nss(parseNs(dbname, cmdObj));
@@ -138,8 +138,9 @@ public:
nsStruct.requestedNss = nss;
nsStruct.executionNss = resolvedAggRequest.getNamespaceString();
+ auto bodyBuilder = result->getBodyBuilder();
return ClusterAggregate::runAggregate(
- opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, out);
+ opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, &bodyBuilder);
}
long long millisElapsed = timer.millis();
@@ -147,12 +148,13 @@ public:
const char* mongosStageName =
ClusterExplain::getStageNameForReadOp(shardResponses.size(), cmdObj);
+ auto bodyBuilder = result->getBodyBuilder();
return ClusterExplain::buildExplainResult(
opCtx,
ClusterExplain::downconvert(opCtx, shardResponses),
mongosStageName,
millisElapsed,
- out);
+ &bodyBuilder);
}
bool run(OperationContext* opCtx,
diff --git a/src/mongo/s/commands/cluster_explain_cmd.cpp b/src/mongo/s/commands/cluster_explain_cmd.cpp
index a04c138ddba..0b7f4c1f286 100644
--- a/src/mongo/s/commands/cluster_explain_cmd.cpp
+++ b/src/mongo/s/commands/cluster_explain_cmd.cpp
@@ -96,13 +96,12 @@ public:
private:
void run(OperationContext* opCtx, rpc::ReplyBuilderInterface* result) override {
- auto bob = result->getBodyBuilder();
- _innerInvocation->explain(opCtx, _verbosity, &bob);
+ _innerInvocation->explain(opCtx, _verbosity, result);
}
void explain(OperationContext* opCtx,
ExplainOptions::Verbosity verbosity,
- BSONObjBuilder* result) override {
+ rpc::ReplyBuilderInterface* result) override {
uasserted(ErrorCodes::IllegalOperation, "Explain cannot explain itself.");
}
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 8393517bac7..75347473ce3 100644
--- a/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp
+++ b/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp
@@ -105,7 +105,7 @@ public:
Status explain(OperationContext* opCtx,
const OpMsgRequest& request,
ExplainOptions::Verbosity verbosity,
- BSONObjBuilder* out) const override {
+ rpc::ReplyBuilderInterface* result) const override {
std::string dbName = request.getDatabase().toString();
const BSONObj& cmdObj = request.body;
const NamespaceString nss(CommandHelpers::parseNsCollectionRequired(dbName, cmdObj));
@@ -134,25 +134,26 @@ public:
// Time how long it takes to run the explain command on the shard.
Timer timer;
- BSONObjBuilder result;
+ BSONObjBuilder bob;
_runCommand(opCtx,
shard->getId(),
(chunkMgr ? chunkMgr->getVersion(shard->getId()) : ChunkVersion::UNSHARDED()),
nss,
explainCmd,
- &result);
+ &bob);
const auto millisElapsed = timer.millis();
Strategy::CommandResult cmdResult;
cmdResult.shardTargetId = shard->getId();
cmdResult.target = shard->getConnString();
- cmdResult.result = result.obj();
+ cmdResult.result = bob.obj();
std::vector<Strategy::CommandResult> shardResults;
shardResults.push_back(cmdResult);
+ auto bodyBuilder = result->getBodyBuilder();
return ClusterExplain::buildExplainResult(
- opCtx, shardResults, ClusterExplain::kSingleShard, millisElapsed, out);
+ opCtx, shardResults, ClusterExplain::kSingleShard, millisElapsed, &bodyBuilder);
}
bool run(OperationContext* opCtx,
diff --git a/src/mongo/s/commands/cluster_find_cmd.cpp b/src/mongo/s/commands/cluster_find_cmd.cpp
index f879e3f1b96..a69d1e4a44f 100644
--- a/src/mongo/s/commands/cluster_find_cmd.cpp
+++ b/src/mongo/s/commands/cluster_find_cmd.cpp
@@ -119,7 +119,7 @@ public:
void explain(OperationContext* opCtx,
ExplainOptions::Verbosity verbosity,
- BSONObjBuilder* result) override {
+ rpc::ReplyBuilderInterface* result) override {
// Parse the command BSON to a QueryRequest.
bool isExplain = true;
auto qr =
@@ -150,15 +150,17 @@ public:
const char* mongosStageName =
ClusterExplain::getStageNameForReadOp(shardResponses.size(), _request.body);
+ auto bodyBuilder = result->getBodyBuilder();
uassertStatusOK(ClusterExplain::buildExplainResult(
opCtx,
ClusterExplain::downconvert(opCtx, shardResponses),
mongosStageName,
millisElapsed,
- result));
+ &bodyBuilder));
} catch (const ExceptionFor<ErrorCodes::CommandOnShardedViewNotSupportedOnMongod>& ex) {
- result->resetToEmpty();
+ auto bodyBuilder = result->getBodyBuilder();
+ bodyBuilder.resetToEmpty();
auto aggCmdOnView = uassertStatusOK(qr->asAggregationCommand());
@@ -173,7 +175,7 @@ public:
nsStruct.executionNss = std::move(ex->getNamespace());
uassertStatusOK(ClusterAggregate::runAggregate(
- opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, result));
+ opCtx, nsStruct, resolvedAggRequest, resolvedAggCmd, &bodyBuilder));
}
}
@@ -199,9 +201,11 @@ public:
std::vector<BSONObj> batch;
auto cursorId =
ClusterFind::runQuery(opCtx, *cq, ReadPreferenceSetting::get(opCtx), &batch);
- auto bodyBuilder = result->getBodyBuilder();
+
// Build the response document.
- CursorResponseBuilder firstBatch(/*firstBatch*/ true, &bodyBuilder);
+ CursorResponseBuilder::Options options;
+ options.isInitialResponse = true;
+ CursorResponseBuilder firstBatch(result, options);
for (const auto& obj : batch) {
firstBatch.append(obj);
}
diff --git a/src/mongo/s/commands/cluster_pipeline_cmd.cpp b/src/mongo/s/commands/cluster_pipeline_cmd.cpp
index 897d4b4091b..ead254ff71f 100644
--- a/src/mongo/s/commands/cluster_pipeline_cmd.cpp
+++ b/src/mongo/s/commands/cluster_pipeline_cmd.cpp
@@ -85,8 +85,9 @@ public:
void explain(OperationContext* opCtx,
ExplainOptions::Verbosity verbosity,
- BSONObjBuilder* out) override {
- _runAggCommand(opCtx, _dbName, _request.body, verbosity, out);
+ rpc::ReplyBuilderInterface* result) override {
+ auto bodyBuilder = result->getBodyBuilder();
+ _runAggCommand(opCtx, _dbName, _request.body, verbosity, &bodyBuilder);
}
void doCheckAuthorization(OperationContext* opCtx) const override {
diff --git a/src/mongo/s/commands/cluster_write_cmd.cpp b/src/mongo/s/commands/cluster_write_cmd.cpp
index b4bbc66d893..f4f3f789038 100644
--- a/src/mongo/s/commands/cluster_write_cmd.cpp
+++ b/src/mongo/s/commands/cluster_write_cmd.cpp
@@ -311,7 +311,7 @@ private:
void explain(OperationContext* opCtx,
ExplainOptions::Verbosity verbosity,
- BSONObjBuilder* result) override {
+ rpc::ReplyBuilderInterface* result) override {
uassert(ErrorCodes::InvalidLength,
"explained write batches must be of size 1",
_batchedRequest.sizeWriteOps() == 1U);
@@ -329,8 +329,9 @@ private:
explainCmd,
targetingBatchItem,
&shardResults));
+ auto bodyBuilder = result->getBodyBuilder();
uassertStatusOK(ClusterExplain::buildExplainResult(
- opCtx, shardResults, ClusterExplain::kWriteOnShards, timer.millis(), result));
+ opCtx, shardResults, ClusterExplain::kWriteOnShards, timer.millis(), &bodyBuilder));
}
NamespaceString ns() const override {