diff options
author | Lamont Nelson <lamont.nelson@mongodb.com> | 2019-09-05 18:32:19 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-09-05 18:32:19 +0000 |
commit | b46eb782c4730c8df589a56550c29c3f3585904a (patch) | |
tree | 908a3dffce58c449a9d241f193c99e1e6ec28bee /src/mongo/db/s/transaction_coordinator_service.cpp | |
parent | 174736c49e4a284d12c2d31a3f9c8bf341a35c65 (diff) | |
download | mongo-b46eb782c4730c8df589a56550c29c3f3585904a.tar.gz |
SERVER-42809 report metrics for the transaction coordinators in curop command
Diffstat (limited to 'src/mongo/db/s/transaction_coordinator_service.cpp')
-rw-r--r-- | src/mongo/db/s/transaction_coordinator_service.cpp | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/src/mongo/db/s/transaction_coordinator_service.cpp b/src/mongo/db/s/transaction_coordinator_service.cpp index 7109c0cadf6..a8e72285cd6 100644 --- a/src/mongo/db/s/transaction_coordinator_service.cpp +++ b/src/mongo/db/s/transaction_coordinator_service.cpp @@ -78,14 +78,47 @@ void TransactionCoordinatorService::createCoordinator(OperationContext* opCtx, latestCoordinator->cancelIfCommitNotYetStarted(); } - catalog.insert(opCtx, - lsid, - txnNumber, - std::make_shared<TransactionCoordinator>(opCtx->getServiceContext(), - lsid, - txnNumber, - scheduler.makeChildScheduler(), - commitDeadline)); + auto coordinator = std::make_shared<TransactionCoordinator>( + opCtx, lsid, txnNumber, scheduler.makeChildScheduler(), commitDeadline); + + catalog.insert(opCtx, lsid, txnNumber, coordinator); +} + + +void TransactionCoordinatorService::reportCoordinators(OperationContext* opCtx, + bool includeIdle, + std::vector<BSONObj>* ops) { + std::shared_ptr<CatalogAndScheduler> cas; + try { + cas = _getCatalogAndScheduler(opCtx); + } catch (ExceptionFor<ErrorCodes::NotMaster>&) { + // If we are not master, don't include any output for transaction coordinators in + // the curOp command. + return; + } + + auto& catalog = cas->catalog; + + auto predicate = + [includeIdle](const LogicalSessionId lsid, + const TxnNumber txnNumber, + const std::shared_ptr<TransactionCoordinator> transactionCoordinator) { + TransactionCoordinator::Step step = transactionCoordinator->getStep(); + if (includeIdle || step > TransactionCoordinator::Step::kInactive) { + return true; + } + return false; + }; + + auto reporter = [ops](const LogicalSessionId lsid, + const TxnNumber txnNumber, + const std::shared_ptr<TransactionCoordinator> transactionCoordinator) { + BSONObjBuilder doc; + transactionCoordinator->reportState(doc); + ops->push_back(doc.obj()); + }; + + catalog.filter(predicate, reporter); } boost::optional<SharedSemiFuture<txn::CommitDecision>> @@ -101,7 +134,8 @@ TransactionCoordinatorService::coordinateCommit(OperationContext* opCtx, return boost::none; } - coordinator->runCommit(std::vector<ShardId>{participantList.begin(), participantList.end()}); + coordinator->runCommit(opCtx, + std::vector<ShardId>{participantList.begin(), participantList.end()}); return coordinator->onCompletion(); @@ -180,7 +214,7 @@ void TransactionCoordinatorService::onStepUp(OperationContext* opCtx, const auto txnNumber = *doc.getId().getTxnNumber(); auto coordinator = std::make_shared<TransactionCoordinator>( - service, + opCtx, lsid, txnNumber, scheduler.makeChildScheduler(), |