diff options
Diffstat (limited to 'src/mongo/s')
-rw-r--r-- | src/mongo/s/commands/cluster_count_cmd.cpp | 1 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_explain_cmd.cpp | 11 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_find_and_modify_cmd.cpp | 1 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_find_cmd.cpp | 10 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_pipeline_cmd.cpp | 3 | ||||
-rw-r--r-- | src/mongo/s/commands/cluster_write_cmd.cpp | 1 | ||||
-rw-r--r-- | src/mongo/s/commands/commands_public.cpp | 2 | ||||
-rw-r--r-- | src/mongo/s/commands/strategy.cpp | 13 |
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); |