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-01-27 18:09:56 +0000 |
commit | 6f74f6f0e9f85d55f7c9b5d217d583f9bba308db (patch) | |
tree | 247bc702d398c09ada284c7f2f6fdcfd46897075 | |
parent | 77d134c7a2bab846aaaa056b0883888a8219da2a (diff) | |
download | mongo-6f74f6f0e9f85d55f7c9b5d217d583f9bba308db.tar.gz |
SERVER-53609 Filter out serverStatus.transactions.lastCommittedTransaction from FTDC
(cherry picked from commit 3e5fc29b410b4a0e999f190de5f035e3119f6565)
4 files changed, 21 insertions, 4 deletions
diff --git a/jstests/noPassthrough/server_transaction_metrics_last_committed_transaction.js b/jstests/noPassthrough/server_transaction_metrics_last_committed_transaction.js index bbbd0741c46..d04c697ed00 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 0026ccf5864..9068f480a8d 100644 --- a/src/mongo/db/ftdc/ftdc_server.cpp +++ b/src/mongo/db/ftdc/ftdc_server.cpp @@ -218,6 +218,10 @@ public: commandBuilder.append("defaultRWConcern", false); commandBuilder.append(MirrorMaestro::kServerStatusSectionName, true); + // Exclude 'serverStatus.transactions.lastCommittedTransactions' because it triggers + // frequent schema changes. + commandBuilder.append("transactions", BSON("includeLastCommitted" << false)); + if (gDiagnosticDataCollectionEnableLatencyHistograms.load()) { BSONObjBuilder subObjBuilder(commandBuilder.subobjStart("opLatencies")); subObjBuilder.append("histograms", true); 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. |