diff options
author | Jack Mulrow <jack.mulrow@mongodb.com> | 2019-08-21 18:33:44 -0400 |
---|---|---|
committer | Jack Mulrow <jack.mulrow@mongodb.com> | 2019-08-22 11:43:21 -0400 |
commit | 4b526b31c6560ec4c632c8062b057d4e346fb1d0 (patch) | |
tree | 9d4992cdc4ab5c15c03e205dfd785d926be31e2c /src/mongo | |
parent | 8a285153c1729dd9dcb417f1dccfa8593d25fe7e (diff) | |
download | mongo-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.cpp | 58 | ||||
-rw-r--r-- | src/mongo/s/transaction_router.h | 4 | ||||
-rw-r--r-- | src/mongo/s/transaction_router_test.cpp | 3 |
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); |