summaryrefslogtreecommitdiff
path: root/src/mongo/db/transaction_metrics_observer.cpp
diff options
context:
space:
mode:
authorJason Chan <jason.chan@mongodb.com>2018-11-01 10:48:37 -0400
committerJason Chan <jason.chan@mongodb.com>2018-11-01 10:50:28 -0400
commit970b1de0ec350ec5487fb230391c7bae33dd0fc2 (patch)
treed69035e821cf2d9b563df6dfde689f0ece051f74 /src/mongo/db/transaction_metrics_observer.cpp
parentc06cea15dcc13c7e8777be5da229b1423ae7465b (diff)
downloadmongo-970b1de0ec350ec5487fb230391c7bae33dd0fc2.tar.gz
SERVER-36501 serverStatus support for prepared transactions
Diffstat (limited to 'src/mongo/db/transaction_metrics_observer.cpp')
-rw-r--r--src/mongo/db/transaction_metrics_observer.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/mongo/db/transaction_metrics_observer.cpp b/src/mongo/db/transaction_metrics_observer.cpp
index eea17ad5379..28a6f26e696 100644
--- a/src/mongo/db/transaction_metrics_observer.cpp
+++ b/src/mongo/db/transaction_metrics_observer.cpp
@@ -100,7 +100,8 @@ void TransactionMetricsObserver::onCommit(ServerTransactionsMetrics* serverTrans
TickSource* tickSource,
boost::optional<repl::OpTime> oldestOplogEntryOpTime,
boost::optional<repl::OpTime> commitOpTime,
- Top* top) {
+ Top* top,
+ bool wasPrepared) {
invariant((oldestOplogEntryOpTime != boost::none && commitOpTime != boost::none) ||
(oldestOplogEntryOpTime == boost::none && commitOpTime == boost::none));
//
@@ -123,6 +124,10 @@ void TransactionMetricsObserver::onCommit(ServerTransactionsMetrics* serverTrans
serverTransactionsMetrics->decrementCurrentOpen();
serverTransactionsMetrics->decrementCurrentActive();
+ if (wasPrepared) {
+ serverTransactionsMetrics->incrementTotalPreparedThenCommitted();
+ }
+
auto duration =
durationCount<Microseconds>(_singleTransactionStats.getDuration(tickSource, curTick));
top->incrementGlobalTransactionLatencyStats(static_cast<uint64_t>(duration));
@@ -137,7 +142,8 @@ void TransactionMetricsObserver::onAbortActive(ServerTransactionsMetrics* server
TickSource* tickSource,
boost::optional<repl::OpTime> oldestOplogEntryOpTime,
boost::optional<repl::OpTime> abortOpTime,
- Top* top) {
+ Top* top,
+ bool wasPrepared) {
invariant((oldestOplogEntryOpTime != boost::none && abortOpTime != boost::none) ||
(oldestOplogEntryOpTime == boost::none && abortOpTime == boost::none));
@@ -157,6 +163,10 @@ void TransactionMetricsObserver::onAbortActive(ServerTransactionsMetrics* server
//
serverTransactionsMetrics->decrementCurrentActive();
+ if (wasPrepared) {
+ serverTransactionsMetrics->incrementTotalPreparedThenAborted();
+ }
+
// Remove this transaction's oldest oplog entry OpTime if one was written.
if (oldestOplogEntryOpTime) {
serverTransactionsMetrics->removeActiveOpTime(*oldestOplogEntryOpTime, abortOpTime);
@@ -215,11 +225,13 @@ void TransactionMetricsObserver::_onAbort(ServerTransactionsMetrics* serverTrans
}
void TransactionMetricsObserver::onPrepare(ServerTransactionsMetrics* serverTransactionsMetrics,
- repl::OpTime prepareOpTime) {
+ repl::OpTime prepareOpTime,
+ TickSource::Tick curTick) {
// Since we currently only write an oplog entry for an in progress transaction when it is in
// the prepare state, the prepareOpTime is currently the oldest OpTime written to the
// oplog for this transaction.
serverTransactionsMetrics->addActiveOpTime(prepareOpTime);
+ serverTransactionsMetrics->incrementTotalPrepared();
}
} // namespace mongo