diff options
author | Suganthi Mani <suganthi.mani@mongodb.com> | 2018-12-06 17:55:25 -0500 |
---|---|---|
committer | Suganthi Mani <suganthi.mani@mongodb.com> | 2019-01-23 11:08:10 -0500 |
commit | a5506bfc636604d73019fbd3e0b5dcc6004f2433 (patch) | |
tree | 2dc9968438d8604fa7445204895d9cf4b9c26bb9 /src | |
parent | ef3b9c5afd55a0cec96ea65d3cdf2fe5a8d28007 (diff) | |
download | mongo-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.cpp | 13 |
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'"); } |