summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Chan <jason.chan@mongodb.com>2021-01-06 21:13:38 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-02-04 21:34:37 +0000
commit97f5866b751246f4b035ebe1cff7ac371e2430fa (patch)
treefa4b047e5efd484997c38b4abdf74bf4a6fee9f5
parentd1871f0fb5f61159aecc76865a4b8a3f5d0159fd (diff)
downloadmongo-97f5866b751246f4b035ebe1cff7ac371e2430fa.tar.gz
SERVER-53609 Filter out serverStatus.transactions.lastCommittedTransaction from FTDC
(cherry picked from commit 3e5fc29b410b4a0e999f190de5f035e3119f6565)
-rw-r--r--jstests/noPassthrough/server_transaction_metrics_last_committed_transaction.js7
-rw-r--r--src/mongo/db/ftdc/ftdc_server.cpp4
-rw-r--r--src/mongo/db/server_transactions_metrics.cpp11
-rw-r--r--src/mongo/db/server_transactions_metrics.h3
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.