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-01-27 18:09:56 +0000
commit6f74f6f0e9f85d55f7c9b5d217d583f9bba308db (patch)
tree247bc702d398c09ada284c7f2f6fdcfd46897075
parent77d134c7a2bab846aaaa056b0883888a8219da2a (diff)
downloadmongo-6f74f6f0e9f85d55f7c9b5d217d583f9bba308db.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, 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.