diff options
author | Davis Haupt <davis.haupt@mongodb.com> | 2022-06-23 14:55:08 +0000 |
---|---|---|
committer | Davis Haupt <davis.haupt@mongodb.com> | 2022-06-23 14:55:08 +0000 |
commit | 0d2029091f28a5e7e6c5fc225937dabf197cdd8b (patch) | |
tree | b7a8866d3dfc859d0d047331e36ed61e9dcc7346 /src/mongo/db/s/sharding_ddl_coordinator.h | |
parent | 88d665074f679e024d729f8f0f62eebf2a00bab6 (diff) | |
parent | 57e39f6e07a7aee960f98c4f57c575ff6a203934 (diff) | |
download | mongo-0d2029091f28a5e7e6c5fc225937dabf197cdd8b.tar.gz |
Merge remote-tracking branch 'origin/master' into davish/SERVER-63099
Diffstat (limited to 'src/mongo/db/s/sharding_ddl_coordinator.h')
-rw-r--r-- | src/mongo/db/s/sharding_ddl_coordinator.h | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/src/mongo/db/s/sharding_ddl_coordinator.h b/src/mongo/db/s/sharding_ddl_coordinator.h index 11be5152036..51dcc023f60 100644 --- a/src/mongo/db/s/sharding_ddl_coordinator.h +++ b/src/mongo/db/s/sharding_ddl_coordinator.h @@ -174,11 +174,19 @@ private: template <class StateDoc> class ShardingDDLCoordinatorImpl : public ShardingDDLCoordinator { +public: + boost::optional<BSONObj> reportForCurrentOp( + MongoProcessInterface::CurrentOpConnectionsMode connMode, + MongoProcessInterface::CurrentOpSessionsMode sessionMode) noexcept override { + return basicReportBuilder().obj(); + } protected: ShardingDDLCoordinatorImpl(ShardingDDLCoordinatorService* service, + const std::string& name, const BSONObj& initialStateDoc) : ShardingDDLCoordinator(service, initialStateDoc), + _coordinatorName(name), _initialState(initialStateDoc.getOwned()), _doc(StateDoc::parse(IDLParserErrorContext("CoordinatorDocument"), _initialState)) {} @@ -186,6 +194,34 @@ protected: return _doc.getShardingDDLCoordinatorMetadata(); } + + virtual void appendCommandInfo(BSONObjBuilder* cmdInfoBuilder) const {}; + + virtual BSONObjBuilder basicReportBuilder() const noexcept { + BSONObjBuilder bob; + + // Append static info + bob.append("type", "op"); + bob.append("ns", nss().toString()); + bob.append("desc", _coordinatorName); + bob.append("op", "command"); + bob.append("active", true); + + // Create command description + BSONObjBuilder cmdInfoBuilder; + { + stdx::lock_guard lk{_docMutex}; + if (const auto& optComment = getForwardableOpMetadata().getComment()) { + cmdInfoBuilder.append(optComment.get().firstElement()); + } + } + appendCommandInfo(&cmdInfoBuilder); + bob.append("command", cmdInfoBuilder.obj()); + + return bob; + } + + const std::string _coordinatorName; const BSONObj _initialState; mutable Mutex _docMutex = MONGO_MAKE_LATCH("ShardingDDLCoordinator::_docMutex"); StateDoc _doc; @@ -193,14 +229,14 @@ protected: template <class StateDoc, class Phase> class RecoverableShardingDDLCoordinator : public ShardingDDLCoordinatorImpl<StateDoc> { - protected: using ShardingDDLCoordinatorImpl<StateDoc>::_doc; using ShardingDDLCoordinatorImpl<StateDoc>::_docMutex; RecoverableShardingDDLCoordinator(ShardingDDLCoordinatorService* service, + const std::string& name, const BSONObj& initialStateDoc) - : ShardingDDLCoordinatorImpl<StateDoc>(service, initialStateDoc) {} + : ShardingDDLCoordinatorImpl<StateDoc>(service, name, initialStateDoc) {} virtual StringData serializePhase(const Phase& phase) const = 0; @@ -245,6 +281,18 @@ protected: } } + BSONObjBuilder basicReportBuilder() const noexcept override { + auto baseReportBuilder = ShardingDDLCoordinatorImpl<StateDoc>::basicReportBuilder(); + + const auto currPhase = [&]() { + stdx::lock_guard l{_docMutex}; + return _doc.getPhase(); + }(); + + baseReportBuilder.append("currentPhase", serializePhase(currPhase)); + return baseReportBuilder; + } + void _insertStateDocument(OperationContext* opCtx, StateDoc&& newDoc) { auto copyMetadata = newDoc.getShardingDDLCoordinatorMetadata(); copyMetadata.setRecoveredFromDisk(true); |