diff options
author | Jason Chan <jason.chan@mongodb.com> | 2018-11-01 10:48:37 -0400 |
---|---|---|
committer | Jason Chan <jason.chan@mongodb.com> | 2018-11-01 10:50:28 -0400 |
commit | 970b1de0ec350ec5487fb230391c7bae33dd0fc2 (patch) | |
tree | d69035e821cf2d9b563df6dfde689f0ece051f74 /src/mongo/db/transaction_metrics_observer.cpp | |
parent | c06cea15dcc13c7e8777be5da229b1423ae7465b (diff) | |
download | mongo-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.cpp | 18 |
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 |