diff options
author | Bernard Gorman <bernard.gorman@gmail.com> | 2018-01-23 17:18:36 +0000 |
---|---|---|
committer | Bernard Gorman <bernard.gorman@gmail.com> | 2018-01-25 17:08:03 +0000 |
commit | a9c8f03bb791e7ab23f3451f03ae7a79385b8194 (patch) | |
tree | 3af99c278435ba1a238c81b9b458b38dee828934 /src/mongo/db/query/find.cpp | |
parent | 2260912ecb519ea0648f2abf3790089f222b0bd9 (diff) | |
download | mongo-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.cpp | 9 |
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)); } |