summaryrefslogtreecommitdiff
path: root/src/mongo/s
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s')
-rw-r--r--src/mongo/s/commands/cluster_count_cmd.cpp1
-rw-r--r--src/mongo/s/commands/cluster_explain_cmd.cpp11
-rw-r--r--src/mongo/s/commands/cluster_find_and_modify_cmd.cpp1
-rw-r--r--src/mongo/s/commands/cluster_find_cmd.cpp10
-rw-r--r--src/mongo/s/commands/cluster_pipeline_cmd.cpp3
-rw-r--r--src/mongo/s/commands/cluster_write_cmd.cpp1
-rw-r--r--src/mongo/s/commands/commands_public.cpp2
-rw-r--r--src/mongo/s/commands/strategy.cpp13
8 files changed, 20 insertions, 22 deletions
diff --git a/src/mongo/s/commands/cluster_count_cmd.cpp b/src/mongo/s/commands/cluster_count_cmd.cpp
index 2389a7c9b97..ea66e57fef8 100644
--- a/src/mongo/s/commands/cluster_count_cmd.cpp
+++ b/src/mongo/s/commands/cluster_count_cmd.cpp
@@ -241,7 +241,6 @@ public:
const std::string& dbname,
const BSONObj& cmdObj,
ExplainOptions::Verbosity verbosity,
- const rpc::ServerSelectionMetadata& ssm,
BSONObjBuilder* out) const override {
const NamespaceString nss(parseNs(dbname, cmdObj));
uassert(ErrorCodes::InvalidNamespace,
diff --git a/src/mongo/s/commands/cluster_explain_cmd.cpp b/src/mongo/s/commands/cluster_explain_cmd.cpp
index db053de01a0..6f03cecb53b 100644
--- a/src/mongo/s/commands/cluster_explain_cmd.cpp
+++ b/src/mongo/s/commands/cluster_explain_cmd.cpp
@@ -143,16 +143,9 @@ public:
str::stream() << "Explain failed due to unknown command: " << cmdName});
}
- auto readPref = ClusterFind::extractUnwrappedReadPref(cmdObj);
- if (!readPref.isOK()) {
- return appendCommandStatus(result, readPref.getStatus());
- }
- const bool secondaryOk = (readPref.getValue().pref != ReadPreference::PrimaryOnly);
- rpc::ServerSelectionMetadata metadata(secondaryOk, readPref.getValue());
-
// Actually call the nested command's explain(...) method.
- Status explainStatus = commToExplain->explain(
- opCtx, dbName, explainObj, verbosity.getValue(), metadata, &result);
+ Status explainStatus =
+ commToExplain->explain(opCtx, dbName, explainObj, verbosity.getValue(), &result);
if (!explainStatus.isOK()) {
return appendCommandStatus(result, explainStatus);
}
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 f16c508ca59..ee23438a2fb 100644
--- a/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp
+++ b/src/mongo/s/commands/cluster_find_and_modify_cmd.cpp
@@ -84,7 +84,6 @@ public:
const std::string& dbName,
const BSONObj& cmdObj,
ExplainOptions::Verbosity verbosity,
- const rpc::ServerSelectionMetadata& serverSelectionMetadata,
BSONObjBuilder* out) const override {
const NamespaceString nss(parseNsCollectionRequired(dbName, cmdObj));
diff --git a/src/mongo/s/commands/cluster_find_cmd.cpp b/src/mongo/s/commands/cluster_find_cmd.cpp
index a09a839a94a..83598d92401 100644
--- a/src/mongo/s/commands/cluster_find_cmd.cpp
+++ b/src/mongo/s/commands/cluster_find_cmd.cpp
@@ -38,6 +38,7 @@
#include "mongo/db/stats/counters.h"
#include "mongo/db/views/resolved_view.h"
#include "mongo/rpc/get_status_from_command_result.h"
+#include "mongo/rpc/metadata/server_selection_metadata.h"
#include "mongo/s/commands/cluster_aggregate.h"
#include "mongo/s/commands/strategy.h"
#include "mongo/s/query/cluster_find.h"
@@ -105,7 +106,6 @@ public:
const std::string& dbname,
const BSONObj& cmdObj,
ExplainOptions::Verbosity verbosity,
- const rpc::ServerSelectionMetadata& serverSelectionMetadata,
BSONObjBuilder* out) const final {
const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj));
// Parse the command BSON to a QueryRequest.
@@ -115,8 +115,12 @@ public:
return qr.getStatus();
}
- auto result = Strategy::explainFind(
- opCtx, cmdObj, *qr.getValue(), verbosity, serverSelectionMetadata, out);
+ auto result = Strategy::explainFind(opCtx,
+ cmdObj,
+ *qr.getValue(),
+ verbosity,
+ rpc::ServerSelectionMetadata::get(opCtx),
+ out);
if (result == ErrorCodes::CommandOnShardedViewNotSupportedOnMongod) {
auto resolvedView = ResolvedView::fromBSON(out->asTempObj());
diff --git a/src/mongo/s/commands/cluster_pipeline_cmd.cpp b/src/mongo/s/commands/cluster_pipeline_cmd.cpp
index dca24de659e..9841f87d6a4 100644
--- a/src/mongo/s/commands/cluster_pipeline_cmd.cpp
+++ b/src/mongo/s/commands/cluster_pipeline_cmd.cpp
@@ -80,13 +80,12 @@ public:
const std::string& dbname,
const BSONObj& cmdObj,
ExplainOptions::Verbosity verbosity,
- const rpc::ServerSelectionMetadata& serverSelectionMetadata,
BSONObjBuilder* out) const override {
// Add the server selection metadata to the aggregate command in the "unwrapped" format that
// runAggregate() expects: {aggregate: ..., $queryOptions: {$readPreference: ...}}.
BSONObjBuilder aggCmdBuilder;
aggCmdBuilder.appendElements(cmdObj);
- if (auto readPref = serverSelectionMetadata.getReadPreference()) {
+ if (auto readPref = rpc::ServerSelectionMetadata::get(opCtx).getReadPreference()) {
aggCmdBuilder.append(QueryRequest::kUnwrappedReadPrefField,
BSON("$readPreference" << readPref->toBSON()));
}
diff --git a/src/mongo/s/commands/cluster_write_cmd.cpp b/src/mongo/s/commands/cluster_write_cmd.cpp
index dc9ab0c27b9..96d40270a32 100644
--- a/src/mongo/s/commands/cluster_write_cmd.cpp
+++ b/src/mongo/s/commands/cluster_write_cmd.cpp
@@ -96,7 +96,6 @@ public:
const std::string& dbname,
const BSONObj& cmdObj,
ExplainOptions::Verbosity verbosity,
- const rpc::ServerSelectionMetadata& serverSelectionMetadata,
BSONObjBuilder* out) const {
BatchedCommandRequest request(_writeType);
diff --git a/src/mongo/s/commands/commands_public.cpp b/src/mongo/s/commands/commands_public.cpp
index 208539821b9..80fbf479a93 100644
--- a/src/mongo/s/commands/commands_public.cpp
+++ b/src/mongo/s/commands/commands_public.cpp
@@ -888,7 +888,6 @@ public:
const std::string& dbname,
const BSONObj& cmdObj,
ExplainOptions::Verbosity verbosity,
- const rpc::ServerSelectionMetadata& serverSelectionMetadata,
BSONObjBuilder* out) const override {
// We will time how long it takes to run the commands on the shards.
Timer timer;
@@ -1116,7 +1115,6 @@ public:
const std::string& dbname,
const BSONObj& cmdObj,
ExplainOptions::Verbosity verbosity,
- const rpc::ServerSelectionMetadata& ssm,
BSONObjBuilder* out) const {
const NamespaceString nss(parseNsCollectionRequired(dbname, cmdObj));
diff --git a/src/mongo/s/commands/strategy.cpp b/src/mongo/s/commands/strategy.cpp
index 707b728efe4..59f899a88b1 100644
--- a/src/mongo/s/commands/strategy.cpp
+++ b/src/mongo/s/commands/strategy.cpp
@@ -353,15 +353,20 @@ DbResponse Strategy::clientCommandOp(OperationContext* opCtx,
if (e.type() == Object && (e.fieldName()[0] == '$' ? str::equals("query", e.fieldName() + 1)
: str::equals("query", e.fieldName()))) {
// Extract the embedded query object.
- if (cmdObj.hasField(Query::ReadPrefField.name())) {
+ if (auto readPrefElem = cmdObj[Query::ReadPrefField.name()]) {
// The command has a read preference setting. We don't want to lose this information
- // so we copy this to a new field called $queryOptions.$readPreference
+ // so we put it on the OperationContext and copy it to a new field called
+ // $queryOptions.$readPreference
+ auto readPref =
+ uassertStatusOK(ReadPreferenceSetting::fromBSON(readPrefElem.Obj()));
+ rpc::ServerSelectionMetadata::get(opCtx) = rpc::ServerSelectionMetadata(
+ readPref.pref != ReadPreference::PrimaryOnly, readPref);
haveReadPref = true;
BSONObjBuilder finalCmdObjBuilder;
finalCmdObjBuilder.appendElements(e.embeddedObject());
BSONObjBuilder queryOptionsBuilder(finalCmdObjBuilder.subobjStart("$queryOptions"));
- queryOptionsBuilder.append(cmdObj[Query::ReadPrefField.name()]);
+ queryOptionsBuilder.append(readPrefElem);
queryOptionsBuilder.done();
cmdObj = finalCmdObjBuilder.obj();
@@ -373,6 +378,8 @@ DbResponse Strategy::clientCommandOp(OperationContext* opCtx,
if (!haveReadPref && q.queryOptions & QueryOption_SlaveOk) {
// If the slaveOK bit is set, behave as-if read preference secondary-preferred was
// specified.
+ rpc::ServerSelectionMetadata::get(opCtx) = rpc::ServerSelectionMetadata(
+ true, ReadPreferenceSetting(ReadPreference::SecondaryPreferred));
BSONObjBuilder finalCmdObjBuilder;
finalCmdObjBuilder.appendElements(cmdObj);