summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorJack Mulrow <jack.mulrow@mongodb.com>2019-08-21 18:33:44 -0400
committerJack Mulrow <jack.mulrow@mongodb.com>2019-08-22 11:43:21 -0400
commit4b526b31c6560ec4c632c8062b057d4e346fb1d0 (patch)
tree9d4992cdc4ab5c15c03e205dfd785d926be31e2c /src/mongo
parent8a285153c1729dd9dcb417f1dccfa8593d25fe7e (diff)
downloadmongo-4b526b31c6560ec4c632c8062b057d4e346fb1d0.tar.gz
SERVER-42963 For active sessions only set transaction stats in TransactionRouter::Observer::_reportState()
Diffstat (limited to 'src/mongo')
-rw-r--r--src/mongo/s/transaction_router.cpp58
-rw-r--r--src/mongo/s/transaction_router.h4
-rw-r--r--src/mongo/s/transaction_router_test.cpp3
3 files changed, 35 insertions, 30 deletions
diff --git a/src/mongo/s/transaction_router.cpp b/src/mongo/s/transaction_router.cpp
index 5149cd85809..8a57e3a05d7 100644
--- a/src/mongo/s/transaction_router.cpp
+++ b/src/mongo/s/transaction_router.cpp
@@ -303,29 +303,39 @@ void TransactionRouter::Observer::_reportState(OperationContext* opCtx,
return;
}
- // Append relevant client metadata.
+ // Append relevant client metadata for transactions with inactive sessions. For those with
+ // active sessions, these fields will already be in the output.
- builder->append("type", sessionIsActive ? "activeSession" : "idleSession");
- builder->append("host", getHostNameCachedAndPort());
- builder->append("desc", sessionIsActive ? "active transaction" : "inactive transaction");
+ if (!sessionIsActive) {
+ builder->append("type", "idleSession");
+ builder->append("host", getHostNameCachedAndPort());
+ builder->append("desc", "inactive transaction");
- const auto& lastClientInfo = o().lastClientInfo;
- builder->append("client", lastClientInfo.clientHostAndPort);
- builder->append("connectionId", lastClientInfo.connectionId);
- builder->append("appName", lastClientInfo.appName);
- builder->append("clientMetadata", lastClientInfo.clientMetadata);
+ const auto& lastClientInfo = o().lastClientInfo;
+ builder->append("client", lastClientInfo.clientHostAndPort);
+ builder->append("connectionId", lastClientInfo.connectionId);
+ builder->append("appName", lastClientInfo.appName);
+ builder->append("clientMetadata", lastClientInfo.clientMetadata);
- // Append session and transaction metadata.
+ {
+ BSONObjBuilder lsid(builder->subobjStart("lsid"));
+ _sessionId().serialize(&lsid);
+ }
- {
- BSONObjBuilder lsid(builder->subobjStart("lsid"));
- _sessionId().serialize(&lsid);
+ builder->append("active", sessionIsActive);
}
- BSONObjBuilder transactionBuilder(builder->subobjStart("transaction"));
+ // Append current transaction info.
+
+ BSONObjBuilder transactionBuilder;
+ _reportTransactionState(opCtx, &transactionBuilder);
+ builder->append("transaction", transactionBuilder.obj());
+}
+void TransactionRouter::Observer::_reportTransactionState(OperationContext* opCtx,
+ BSONObjBuilder* builder) const {
{
- BSONObjBuilder parametersBuilder(transactionBuilder.subobjStart("parameters"));
+ BSONObjBuilder parametersBuilder(builder->subobjStart("parameters"));
parametersBuilder.append("txnNumber", o().txnNumber);
parametersBuilder.append("autocommit", false);
if (!o().readConcernArgs.isEmpty()) {
@@ -333,8 +343,6 @@ void TransactionRouter::Observer::_reportState(OperationContext* opCtx,
}
}
- // Append current transaction info.
-
if (_atClusterTimeHasBeenSet()) {
builder->append("globalReadTimestamp", o().atClusterTime->getTime().asTimestamp());
}
@@ -380,21 +388,17 @@ void TransactionRouter::Observer::_reportState(OperationContext* opCtx,
participantsArrayBuilder.append(participantBuilder.obj());
}
- transactionBuilder.appendArray("participants", participantsArrayBuilder.obj());
+ builder->appendArray("participants", participantsArrayBuilder.obj());
}
if (o().commitType != CommitType::kNotInitiated) {
- transactionBuilder.append("commitStartWallClockTime",
- dateToISOStringLocal(timingStats.commitStartWallClockTime));
- transactionBuilder.append("commitType", commitTypeToString(o().commitType));
+ builder->append("commitStartWallClockTime",
+ dateToISOStringLocal(timingStats.commitStartWallClockTime));
+ builder->append("commitType", commitTypeToString(o().commitType));
}
- transactionBuilder.append("numReadOnlyParticipants", numReadOnlyParticipants);
- transactionBuilder.append("numNonReadOnlyParticipants", numNonReadOnlyParticipants);
-
- transactionBuilder.done();
-
- builder->append("active", sessionIsActive);
+ builder->append("numReadOnlyParticipants", numReadOnlyParticipants);
+ builder->append("numNonReadOnlyParticipants", numNonReadOnlyParticipants);
}
bool TransactionRouter::Observer::_atClusterTimeHasBeenSet() const {
diff --git a/src/mongo/s/transaction_router.h b/src/mongo/s/transaction_router.h
index 10879068894..46c7faa87ca 100644
--- a/src/mongo/s/transaction_router.h
+++ b/src/mongo/s/transaction_router.h
@@ -266,6 +266,10 @@ public:
BSONObjBuilder* builder,
bool sessionIsActive) const;
+ // Reports the 'transaction' state of this transaction for currentOp using the provided
+ // builder.
+ void _reportTransactionState(OperationContext* opCtx, BSONObjBuilder* builder) const;
+
// Returns true if the atClusterTime has been changed from the default uninitialized value.
bool _atClusterTimeHasBeenSet() const;
diff --git a/src/mongo/s/transaction_router_test.cpp b/src/mongo/s/transaction_router_test.cpp
index 483865a1d1d..2d5b5a3769b 100644
--- a/src/mongo/s/transaction_router_test.cpp
+++ b/src/mongo/s/transaction_router_test.cpp
@@ -4358,8 +4358,6 @@ TEST_F(TransactionRouterMetricsTest, ReportResourcesWithParticipantList) {
auto transactionDocument = state.getObjectField("transaction");
auto parametersDocument = transactionDocument.getObjectField("parameters");
- ASSERT_EQ(state.getField("desc").valueStringData().toString(), "active transaction");
- ASSERT_EQ(state.getField("type").valueStringData().toString(), "activeSession");
ASSERT_GTE(transactionDocument.getField("readTimestamp").timestamp(), Timestamp(0, 0));
ASSERT_EQ(dateFromISOString(transactionDocument.getField("startWallClockTime").String()),
startTime);
@@ -4410,7 +4408,6 @@ TEST_F(TransactionRouterMetricsTest, ReportResourcesWithParticipantList) {
ASSERT_EQ(transactionDocument.getField("numNonReadOnlyParticipants").numberInt(), 1);
ASSERT_EQ(transactionDocument.getField("numReadOnlyParticipants").numberInt(), 1);
- ASSERT_EQ(state.getField("active").boolean(), true);
ASSERT_GTE(transactionDocument.getField("timeOpenMicros").numberLong(), 0);
ASSERT_GTE(transactionDocument.getField("timeActiveMicros").numberLong(), 0);
ASSERT_GTE(transactionDocument.getField("timeInactiveMicros").numberLong(), 0);