diff options
author | Jason Chan <jason.chan@mongodb.com> | 2021-01-06 21:13:38 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-04 21:34:37 +0000 |
commit | 97f5866b751246f4b035ebe1cff7ac371e2430fa (patch) | |
tree | fa4b047e5efd484997c38b4abdf74bf4a6fee9f5 | |
parent | d1871f0fb5f61159aecc76865a4b8a3f5d0159fd (diff) | |
download | mongo-97f5866b751246f4b035ebe1cff7ac371e2430fa.tar.gz |
SERVER-53609 Filter out serverStatus.transactions.lastCommittedTransaction from FTDC
(cherry picked from commit 3e5fc29b410b4a0e999f190de5f035e3119f6565)
4 files changed, 19 insertions, 6 deletions
diff --git a/jstests/noPassthrough/server_transaction_metrics_last_committed_transaction.js b/jstests/noPassthrough/server_transaction_metrics_last_committed_transaction.js index b1469b92852..9657952bb0d 100644 --- a/jstests/noPassthrough/server_transaction_metrics_last_committed_transaction.js +++ b/jstests/noPassthrough/server_transaction_metrics_last_committed_transaction.js @@ -61,6 +61,13 @@ assert(!res.transactions.hasOwnProperty("lastCommittedTransaction"), () => tojso assert.commandWorked(PrepareHelpers.commitTransaction(session, prepareTimestampForCommit)); checkLastCommittedTransaction(1, {}); +// Check that we are able to exclude 'lastCommittedTransaction'. FTDC uses this to filter out +// the section as it frequently triggers scheme changes. +let filteredRes = assert.commandWorked( + primary.adminCommand({serverStatus: 1, transactions: {includeLastCommitted: false}})); +assert(!filteredRes.transactions.hasOwnProperty("lastCommittedTransaction"), + () => tojson(filteredRes)); + function runTests(prepare) { jsTestLog("Testing server transaction metrics with prepare=" + prepare); diff --git a/src/mongo/db/ftdc/ftdc_server.cpp b/src/mongo/db/ftdc/ftdc_server.cpp index 142ef262751..998d0f18f95 100644 --- a/src/mongo/db/ftdc/ftdc_server.cpp +++ b/src/mongo/db/ftdc/ftdc_server.cpp @@ -229,8 +229,8 @@ void startFTDC(boost::filesystem::path& path, "serverStatus", "serverStatus", "", - BSON("serverStatus" << 1 << "tcMalloc" << true << "sharding" << false << "timing" - << false))); + BSON("serverStatus" << 1 << "tcMalloc" << true << "sharding" << false << "timing" << false + << "transactions" << BSON("includeLastCommitted" << false)))); registerCollectors(controller.get()); diff --git a/src/mongo/db/server_transactions_metrics.cpp b/src/mongo/db/server_transactions_metrics.cpp index a51ecc0345c..411e898dbe3 100644 --- a/src/mongo/db/server_transactions_metrics.cpp +++ b/src/mongo/db/server_transactions_metrics.cpp @@ -161,7 +161,7 @@ void ServerTransactionsMetrics::updateLastTransaction(size_t operationCount, _lastCommittedTransaction->setWriteConcern(std::move(writeConcern)); } -void ServerTransactionsMetrics::updateStats(TransactionsStats* stats) { +void ServerTransactionsMetrics::updateStats(TransactionsStats* stats, bool includeLastCommitted) { stats->setCurrentActive(_currentActive.load()); stats->setCurrentInactive(_currentInactive.load()); stats->setCurrentOpen(_currentOpen.load()); @@ -174,7 +174,7 @@ void ServerTransactionsMetrics::updateStats(TransactionsStats* stats) { stats->setCurrentPrepared(_currentPrepared.load()); stdx::lock_guard<Latch> lg(_mutex); - if (_lastCommittedTransaction) { + if (_lastCommittedTransaction && includeLastCommitted) { stats->setLastCommittedTransaction(*_lastCommittedTransaction); } } @@ -194,12 +194,17 @@ public: const BSONElement& configElement) const override { TransactionsStats stats; + bool includeLastCommitted = true; + if (configElement.type() == BSONType::Object) { + includeLastCommitted = configElement.Obj()["includeLastCommitted"].trueValue(); + } + // Retryable writes and multi-document transactions metrics are both included in the same // serverStatus section because both utilize similar internal machinery for tracking their // lifecycle within a session. Both are assigned transaction numbers, and so both are often // referred to as “transactions”. RetryableWritesStats::get(opCtx)->updateStats(&stats); - ServerTransactionsMetrics::get(opCtx)->updateStats(&stats); + ServerTransactionsMetrics::get(opCtx)->updateStats(&stats, includeLastCommitted); return stats.toBSON(); } diff --git a/src/mongo/db/server_transactions_metrics.h b/src/mongo/db/server_transactions_metrics.h index 78523e5fa36..d17742dd5b6 100644 --- a/src/mongo/db/server_transactions_metrics.h +++ b/src/mongo/db/server_transactions_metrics.h @@ -94,8 +94,9 @@ public: /** * Appends the accumulated stats to a transactions stats object. + * Include the 'lastCommittedTransactions' field if 'includeLastCommitted' is true. */ - void updateStats(TransactionsStats* stats); + void updateStats(TransactionsStats* stats, bool includeLastCommitted); private: // The number of multi-document transactions currently active. |