summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/transaction_coordinator_service.cpp
diff options
context:
space:
mode:
authorLamont Nelson <lamont.nelson@mongodb.com>2019-09-05 18:32:19 +0000
committerevergreen <evergreen@mongodb.com>2019-09-05 18:32:19 +0000
commitb46eb782c4730c8df589a56550c29c3f3585904a (patch)
tree908a3dffce58c449a9d241f193c99e1e6ec28bee /src/mongo/db/s/transaction_coordinator_service.cpp
parent174736c49e4a284d12c2d31a3f9c8bf341a35c65 (diff)
downloadmongo-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.cpp54
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(),