summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands/explain_cmd.cpp
diff options
context:
space:
mode:
authorAdam Midvidy <amidvidy@gmail.com>2015-05-15 19:22:41 -0400
committerAdam Midvidy <amidvidy@gmail.com>2015-05-18 21:09:07 -0400
commit635897bdc5276db6f32a0a347644813b753644f4 (patch)
tree1e136351522275b835bcf3d742d8b068a3002a30 /src/mongo/db/commands/explain_cmd.cpp
parent43dedc33efa736e91d3389d9a972c93fef78e06a (diff)
downloadmongo-635897bdc5276db6f32a0a347644813b753644f4.tar.gz
SERVER-17607 initial OP_COMMAND mongod implementation
Diffstat (limited to 'src/mongo/db/commands/explain_cmd.cpp')
-rw-r--r--src/mongo/db/commands/explain_cmd.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/mongo/db/commands/explain_cmd.cpp b/src/mongo/db/commands/explain_cmd.cpp
index b7184152110..dc8c06de588 100644
--- a/src/mongo/db/commands/explain_cmd.cpp
+++ b/src/mongo/db/commands/explain_cmd.cpp
@@ -90,10 +90,16 @@ namespace mongo {
// copied from Command::execCommand and should be abstracted. Until then, make
// sure to keep it up to date.
repl::ReplicationCoordinator* replCoord = repl::getGlobalReplicationCoordinator();
- const bool canRunHere =
- replCoord->canAcceptWritesForDatabase(dbname) ||
- commToExplain->slaveOk() ||
- (commToExplain->slaveOverrideOk() && (options & QueryOption_SlaveOk));
+ bool iAmPrimary = replCoord->canAcceptWritesForDatabase(dbname);
+ bool commandCanRunOnSecondary = commToExplain->slaveOk();
+ bool commandIsOverriddenToRunOnSecondary = commToExplain->slaveOverrideOk() &&
+ ((options & QueryOption_SlaveOk) || Query::hasReadPreference(explainObj));
+ bool iAmStandalone = !txn->writesAreReplicated();
+
+ const bool canRunHere = iAmPrimary ||
+ commandCanRunOnSecondary ||
+ commandIsOverriddenToRunOnSecondary ||
+ iAmStandalone;
if (!canRunHere) {
mongoutils::str::stream ss;