diff options
author | Gregory Noma <gregory.noma@gmail.com> | 2020-04-21 13:51:04 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-04-21 18:05:40 +0000 |
commit | fa945325938ada67a088e7dbe951404d092e8771 (patch) | |
tree | bcf81a765d3f565d3cfc425f2c576136c03e42f4 /src/mongo | |
parent | 3ebb641b1c0fb63243e801b966ccde1167fdada9 (diff) | |
download | mongo-fa945325938ada67a088e7dbe951404d092e8771.tar.gz |
SERVER-47641 Report total number of range deletion tasks in serverStatus rather than per collection
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/s/collection_sharding_runtime.cpp | 15 | ||||
-rw-r--r-- | src/mongo/db/s/collection_sharding_runtime.h | 2 | ||||
-rw-r--r-- | src/mongo/db/s/collection_sharding_state.cpp | 20 | ||||
-rw-r--r-- | src/mongo/db/s/collection_sharding_state.h | 4 | ||||
-rw-r--r-- | src/mongo/db/s/collection_sharding_state_factory_embedded.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/s/collection_sharding_state_factory_standalone.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/s/metadata_manager.cpp | 18 | ||||
-rw-r--r-- | src/mongo/db/s/metadata_manager.h | 11 |
8 files changed, 41 insertions, 39 deletions
diff --git a/src/mongo/db/s/collection_sharding_runtime.cpp b/src/mongo/db/s/collection_sharding_runtime.cpp index 3672034e227..f0410eee7d0 100644 --- a/src/mongo/db/s/collection_sharding_runtime.cpp +++ b/src/mongo/db/s/collection_sharding_runtime.cpp @@ -422,19 +422,20 @@ void CollectionShardingRuntime::appendPendingReceiveChunks(BSONArrayBuilder* bui _metadataManager->toBSONPending(*builder); } -void CollectionShardingRuntime::appendInfoForServerStatus(BSONArrayBuilder* builder) { - stdx::lock_guard lk(_metadataManagerLock); - if (_metadataManager) { - _metadataManager->appendForServerStatus(builder); - } -} - void CollectionShardingRuntime::clearReceivingChunks() { stdx::lock_guard lk(_metadataManagerLock); invariant(_metadataType == MetadataType::kSharded); _metadataManager->clearReceivingChunks(); } +size_t CollectionShardingRuntime::numberOfRangesScheduledForDeletion() const { + stdx::lock_guard lk(_metadataManagerLock); + if (_metadataManager) { + return _metadataManager->numberOfRangesScheduledForDeletion(); + } + return 0; +} + CollectionCriticalSection::CollectionCriticalSection(OperationContext* opCtx, NamespaceString ns) : _nss(std::move(ns)), _opCtx(opCtx) { AutoGetCollection autoColl(_opCtx, diff --git a/src/mongo/db/s/collection_sharding_runtime.h b/src/mongo/db/s/collection_sharding_runtime.h index 4cc652a8ed5..979414db890 100644 --- a/src/mongo/db/s/collection_sharding_runtime.h +++ b/src/mongo/db/s/collection_sharding_runtime.h @@ -95,7 +95,7 @@ public: void appendShardVersion(BSONObjBuilder* builder) override; - void appendInfoForServerStatus(BSONArrayBuilder* builder) override; + size_t numberOfRangesScheduledForDeletion() const override; /** * Returns boost::none if the description for the collection is not known yet. Otherwise diff --git a/src/mongo/db/s/collection_sharding_state.cpp b/src/mongo/db/s/collection_sharding_state.cpp index dfbdd8069bf..0bff0b18344 100644 --- a/src/mongo/db/s/collection_sharding_state.cpp +++ b/src/mongo/db/s/collection_sharding_state.cpp @@ -86,16 +86,18 @@ public: } void appendInfoForServerStatus(BSONObjBuilder* builder) { - BSONArrayBuilder rangeDeleterArrayBuilder(builder->subarrayStart("rangeDeleterTasks")); - - { + auto totalNumberOfRangesScheduledForDeletion = ([this] { stdx::lock_guard lg(_mutex); - for (auto& coll : _collections) { - coll.second->appendInfoForServerStatus(&rangeDeleterArrayBuilder); - } - } - - rangeDeleterArrayBuilder.done(); + return std::accumulate(_collections.begin(), + _collections.end(), + uint64_t(0), + [](uint64_t total, const auto& coll) { + return total + + coll.second->numberOfRangesScheduledForDeletion(); + }); + })(); + + builder->appendNumber("rangeDeleterTasks", totalNumberOfRangesScheduledForDeletion); } private: diff --git a/src/mongo/db/s/collection_sharding_state.h b/src/mongo/db/s/collection_sharding_state.h index a17db6a22b1..b39e05137d2 100644 --- a/src/mongo/db/s/collection_sharding_state.h +++ b/src/mongo/db/s/collection_sharding_state.h @@ -141,9 +141,9 @@ public: virtual void appendShardVersion(BSONObjBuilder* builder) = 0; /** - * Append information for the collection to be displayed in server status. + * Returns the number of ranges scheduled for deletion on the collection. */ - virtual void appendInfoForServerStatus(BSONArrayBuilder* builder) = 0; + virtual size_t numberOfRangesScheduledForDeletion() const = 0; protected: /** diff --git a/src/mongo/db/s/collection_sharding_state_factory_embedded.cpp b/src/mongo/db/s/collection_sharding_state_factory_embedded.cpp index 8d27a7b5a1c..060f91b8ff1 100644 --- a/src/mongo/db/s/collection_sharding_state_factory_embedded.cpp +++ b/src/mongo/db/s/collection_sharding_state_factory_embedded.cpp @@ -67,7 +67,10 @@ public: void checkShardVersionOrThrow_DEPRECATED(OperationContext*) override {} void appendShardVersion(BSONObjBuilder* builder) override {} - void appendInfoForServerStatus(BSONArrayBuilder* builder) override {} + + size_t numberOfRangesScheduledForDeletion() const override { + return 0; + } }; class CollectionShardingStateFactoryEmbedded final : public CollectionShardingStateFactory { diff --git a/src/mongo/db/s/collection_sharding_state_factory_standalone.cpp b/src/mongo/db/s/collection_sharding_state_factory_standalone.cpp index 4402f888cf2..847d1cae4cc 100644 --- a/src/mongo/db/s/collection_sharding_state_factory_standalone.cpp +++ b/src/mongo/db/s/collection_sharding_state_factory_standalone.cpp @@ -66,7 +66,10 @@ public: void checkShardVersionOrThrow_DEPRECATED(OperationContext*) override {} void appendShardVersion(BSONObjBuilder* builder) override {} - void appendInfoForServerStatus(BSONArrayBuilder* builder) override {} + + size_t numberOfRangesScheduledForDeletion() const override { + return 0; + } }; } // namespace diff --git a/src/mongo/db/s/metadata_manager.cpp b/src/mongo/db/s/metadata_manager.cpp index 7aefef96292..edb793005e0 100644 --- a/src/mongo/db/s/metadata_manager.cpp +++ b/src/mongo/db/s/metadata_manager.cpp @@ -340,19 +340,6 @@ void MetadataManager::append(BSONObjBuilder* builder) const { amrArr.done(); } -void MetadataManager::appendForServerStatus(BSONArrayBuilder* builder) const { - auto numRangeDeletes = ([this] { - stdx::lock_guard<Latch> lg(_managerLock); - return _rangesScheduledForDeletion.size(); - })(); - - if (numRangeDeletes > 0) { - BSONObjBuilder statBuilder; - statBuilder.appendNumber(_nss.ns(), numRangeDeletes); - builder->append(statBuilder.obj()); - } -} - SharedSemiFuture<void> MetadataManager::beginReceive(ChunkRange const& range) { stdx::lock_guard<Latch> lg(_managerLock); invariant(!_metadata.empty()); @@ -479,6 +466,11 @@ size_t MetadataManager::numberOfRangesToClean() const { return _rangesScheduledForDeletion.size() - rangesToCleanInUse; } +size_t MetadataManager::numberOfRangesScheduledForDeletion() const { + stdx::lock_guard<Latch> lg(_managerLock); + return _rangesScheduledForDeletion.size(); +} + boost::optional<SharedSemiFuture<void>> MetadataManager::trackOrphanedDataCleanup( ChunkRange const& range) const { stdx::lock_guard<Latch> lg(_managerLock); diff --git a/src/mongo/db/s/metadata_manager.h b/src/mongo/db/s/metadata_manager.h index 7cb2af0c53e..2844d696874 100644 --- a/src/mongo/db/s/metadata_manager.h +++ b/src/mongo/db/s/metadata_manager.h @@ -124,11 +124,6 @@ public: void append(BSONObjBuilder* builder) const; /** - * Appends summarized information for server status. - */ - void appendForServerStatus(BSONArrayBuilder* builder) const; - - /** * Schedules any documents in `range` for immediate cleanup iff no running queries can depend * on them, and adds the range to the list of ranges currently being received. * @@ -171,6 +166,12 @@ public: size_t numberOfRangesToCleanStillInUse() const; /** + * Returns the number of ranges scheduled for deletion, regardless of whether they may still be + * in use by running queries. + */ + size_t numberOfRangesScheduledForDeletion() const; + + /** * Reports whether any range still scheduled for deletion overlaps the argument range. If so, * returns a future that will be resolved when the newest overlapping range's deletion (possibly * the one of interest) completes or fails. |