summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/find.cpp
diff options
context:
space:
mode:
authorBernard Gorman <bernard.gorman@gmail.com>2018-01-23 17:18:36 +0000
committerBernard Gorman <bernard.gorman@gmail.com>2018-01-25 17:08:03 +0000
commita9c8f03bb791e7ab23f3451f03ae7a79385b8194 (patch)
tree3af99c278435ba1a238c81b9b458b38dee828934 /src/mongo/db/query/find.cpp
parent2260912ecb519ea0648f2abf3790089f222b0bd9 (diff)
downloadmongo-a9c8f03bb791e7ab23f3451f03ae7a79385b8194.tar.gz
SERVER-31293 Don't consider readPreference 'primary' as equivalent to 'slaveOk' in OP_QUERY find path
Diffstat (limited to 'src/mongo/db/query/find.cpp')
-rw-r--r--src/mongo/db/query/find.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/mongo/db/query/find.cpp b/src/mongo/db/query/find.cpp
index 394f7fa552a..6038193508e 100644
--- a/src/mongo/db/query/find.cpp
+++ b/src/mongo/db/query/find.cpp
@@ -562,9 +562,12 @@ std::string runQuery(OperationContext* opCtx,
{
const QueryRequest& qr = cq->getQueryRequest();
- // uassert if we are not on a primary, and not a secondary with SlaveOk query parameter set.
- // TODO(SERVER-31293): Don't set slaveOk for reads with a read pref of "primary".
- const bool slaveOK = qr.isSlaveOk() || qr.hasReadPref();
+ // Allow the query to run on secondaries if the read preference permits it. If no read
+ // preference was specified, allow the query to run iff slaveOk has been set.
+ const bool slaveOK = qr.hasReadPref()
+ ? uassertStatusOK(ReadPreferenceSetting::fromContainingBSON(q.query))
+ .canRunOnSecondary()
+ : qr.isSlaveOk();
uassertStatusOK(
repl::ReplicationCoordinator::get(opCtx)->checkCanServeReadsFor(opCtx, nss, slaveOK));
}