diff options
author | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2019-04-20 22:06:29 -0400 |
---|---|---|
committer | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2019-04-20 22:06:29 -0400 |
commit | 79e114f8da21cf6af58fe34a46adc1aed9897ca3 (patch) | |
tree | a2a166a67f8d73f216b159312e0c0237f51a041b | |
parent | 43fb7ff820793bcc94e160133cc1dacd12bec1c8 (diff) | |
download | mongo-79e114f8da21cf6af58fe34a46adc1aed9897ca3.tar.gz |
SERVER-40329: Log all transactions at TXN verbosity levels >= 1
-rw-r--r-- | src/mongo/db/session.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/session_test.cpp | 55 |
2 files changed, 58 insertions, 2 deletions
diff --git a/src/mongo/db/session.cpp b/src/mongo/db/session.cpp index 8757d733ccd..03acd548174 100644 --- a/src/mongo/db/session.cpp +++ b/src/mongo/db/session.cpp @@ -1366,8 +1366,9 @@ void Session::_logSlowTransaction(WithLock wl, // Only log multi-document transactions. if (_txnState != MultiDocumentTransactionState::kNone) { // Log the transaction if its duration is longer than the slowMS command threshold. - if (_singleTransactionStats.getDuration(curTimeMicros64()) > - serverGlobalParams.slowMS * 1000ULL) { + if (shouldLog(logger::LogComponent::kTransaction, logger::LogSeverity::Debug(1)) || + _singleTransactionStats.getDuration(curTimeMicros64()) > + serverGlobalParams.slowMS * 1000ULL) { log(logger::LogComponent::kTransaction) << "transaction " << _transactionInfoForLog(lockStats, terminationCause, readConcernArgs); diff --git a/src/mongo/db/session_test.cpp b/src/mongo/db/session_test.cpp index 6b23812169d..47a09b35759 100644 --- a/src/mongo/db/session_test.cpp +++ b/src/mongo/db/session_test.cpp @@ -43,6 +43,7 @@ #include "mongo/db/service_context.h" #include "mongo/db/session_catalog.h" #include "mongo/db/stats/fill_locker_info.h" +#include "mongo/logger/logger.h" #include "mongo/stdx/future.h" #include "mongo/stdx/memory.h" #include "mongo/unittest/death_test.h" @@ -2652,5 +2653,59 @@ TEST_F(TransactionsMetricsTest, LogTransactionInfoAfterSlowStashedAbort) { ASSERT_EQUALS(1, countLogLinesContaining(expectedTransactionInfo)); } +TEST_F(TransactionsMetricsTest, LogTransactionInfoVerbosityInfo) { + const auto sessionId = makeLogicalSessionIdForTest(); + Session session(sessionId); + session.refreshFromStorageIfNeeded(opCtx()); + + const TxnNumber txnNum = 1; + opCtx()->setLogicalSessionId(sessionId); + opCtx()->setTxnNumber(txnNum); + + // Set a high slow operation threshold to avoid the transaction being logged as slow. + serverGlobalParams.slowMS = 10000; + + // Set verbosity level of transaction components to info. + logger::globalLogDomain()->setMinimumLoggedSeverity(logger::LogComponent::kTransaction, + logger::LogSeverity::Info()); + + session.beginOrContinueTxn(opCtx(), txnNum, false, true, "admin", "commitTransaction"); + session.unstashTransactionResources(opCtx(), "commitTransaction"); + + startCapturingLogMessages(); + session.commitTransaction(opCtx()); + stopCapturingLogMessages(); + + // Test that the transaction is not logged. + ASSERT_EQUALS(0, countLogLinesContaining("transaction parameters")); +} + +TEST_F(TransactionsMetricsTest, LogTransactionInfoVerbosityDebug) { + const auto sessionId = makeLogicalSessionIdForTest(); + Session session(sessionId); + session.refreshFromStorageIfNeeded(opCtx()); + + const TxnNumber txnNum = 1; + opCtx()->setLogicalSessionId(sessionId); + opCtx()->setTxnNumber(txnNum); + + // Set a high slow operation threshold to avoid the transaction being logged as slow. + serverGlobalParams.slowMS = 10000; + + // Set verbosity level of transaction components to debug. + logger::globalLogDomain()->setMinimumLoggedSeverity(logger::LogComponent::kTransaction, + logger::LogSeverity::Debug(1)); + + session.beginOrContinueTxn(opCtx(), txnNum, false, true, "admin", "commitTransaction"); + session.unstashTransactionResources(opCtx(), "commitTransaction"); + + startCapturingLogMessages(); + session.commitTransaction(opCtx()); + stopCapturingLogMessages(); + + // Test that the transaction is still logged. + ASSERT_EQUALS(1, countLogLinesContaining("transaction parameters")); +} + } // namespace } // namespace mongo |