summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSuganthi Mani <suganthi.mani@mongodb.com>2018-12-06 17:55:25 -0500
committerSuganthi Mani <suganthi.mani@mongodb.com>2019-01-23 11:08:10 -0500
commita5506bfc636604d73019fbd3e0b5dcc6004f2433 (patch)
tree2dc9968438d8604fa7445204895d9cf4b9c26bb9 /src
parentef3b9c5afd55a0cec96ea65d3cdf2fe5a8d28007 (diff)
downloadmongo-a5506bfc636604d73019fbd3e0b5dcc6004f2433.tar.gz
SERVER-37915 Updates serverStatus.opcountersRepl.command on secondaries.
And, atomic applyOps cmd increments serverStatus.opcounters<opType> for each individual operation on primary. (cherry picked from commit 214bf238fedc4e147e6473f5fc64428987added6)
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/repl/oplog.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mongo/db/repl/oplog.cpp b/src/mongo/db/repl/oplog.cpp
index 4e0474f9031..f1eadddd358 100644
--- a/src/mongo/db/repl/oplog.cpp
+++ b/src/mongo/db/repl/oplog.cpp
@@ -1038,7 +1038,13 @@ Status applyOperation_inlock(OperationContext* opCtx,
LOG(3) << "applying op: " << redact(op)
<< ", oplog application mode: " << OplogApplication::modeToString(mode);
- OpCounters* opCounters = opCtx->writesAreReplicated() ? &globalOpCounters : &replOpCounters;
+ // Choose opCounters based on running on standalone/primary or secondary by checking
+ // whether writes are replicated. Atomic applyOps command is an exception, which runs
+ // on primary/standalone but disables write replication.
+ OpCounters* opCounters =
+ (mode == repl::OplogApplication::Mode::kApplyOpsCmd || opCtx->writesAreReplicated())
+ ? &globalOpCounters
+ : &replOpCounters;
std::array<StringData, 8> names = {"ts", "t", "o", "ui", "ns", "op", "b", "o2"};
std::array<BSONElement, 8> fields;
@@ -1515,6 +1521,11 @@ Status applyCommand_inlock(OperationContext* opCtx,
const char* opType = fieldOp.valuestrsafe();
invariant(*opType == 'c'); // only commands are processed here
+ // Choose opCounters based on running on standalone/primary or secondary by checking
+ // whether writes are replicated.
+ OpCounters* opCounters = opCtx->writesAreReplicated() ? &globalOpCounters : &replOpCounters;
+ opCounters->gotCommand();
+
if (fieldO.eoo()) {
return Status(ErrorCodes::NoSuchKey, "Missing expected field 'o'");
}