diff options
author | Gregory Noma <gregory.noma@gmail.com> | 2020-04-22 15:07:55 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-04-22 19:20:43 +0000 |
commit | d0343420e4aa7520e4e2007090ba7a4c499ddae0 (patch) | |
tree | c5ecd76f3481633585168a72c2561af3235a8d8e | |
parent | 93f89d90ff3829181f9103f93780f32264dff929 (diff) | |
download | mongo-d0343420e4aa7520e4e2007090ba7a4c499ddae0.tar.gz |
SERVER-47641 Report total number of range deletion tasks in serverStatus rather than per collection
(cherry picked from commit fa945325938ada67a088e7dbe951404d092e8771)
(cherry picked from commit 9717e231da81bddfeef636fd99b93725a2c2a1c2)
-rw-r--r-- | jstests/sharding/range_deleter_server_status.js | 6 | ||||
-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 |
9 files changed, 42 insertions, 44 deletions
diff --git a/jstests/sharding/range_deleter_server_status.js b/jstests/sharding/range_deleter_server_status.js index c9f49bfdf32..47eb893794c 100644 --- a/jstests/sharding/range_deleter_server_status.js +++ b/jstests/sharding/range_deleter_server_status.js @@ -48,11 +48,7 @@ assert.commandWorked( let shardDB = st.rs0.getPrimary().getDB('test'); let serverStatusRes = shardDB.runCommand({serverStatus: 1}); - -let expectedList = [{'test.foo': 2}, {'test.bar': 1}]; -let taskList = serverStatusRes.shardingStatistics.rangeDeleterTasks; -assert.eq(2, taskList.length, tojson(taskList)); -assert.sameMembers(expectedList, taskList); +assert.eq(3, serverStatusRes.shardingStatistics.rangeDeleterTasks); // Close the cursors so the range deleter tasks can proceed and so there won't be tasks that // can't make progress when the check orphan hooks runs. diff --git a/src/mongo/db/s/collection_sharding_runtime.cpp b/src/mongo/db/s/collection_sharding_runtime.cpp index 0130c1d2f23..f233adf743a 100644 --- a/src/mongo/db/s/collection_sharding_runtime.cpp +++ b/src/mongo/db/s/collection_sharding_runtime.cpp @@ -404,19 +404,20 @@ CollectionShardingRuntime::_getMetadataWithVersionCheckAt( MONGO_UNREACHABLE; } -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 009e012441f..3d22f8e8240 100644 --- a/src/mongo/db/s/collection_sharding_runtime.h +++ b/src/mongo/db/s/collection_sharding_runtime.h @@ -105,7 +105,7 @@ public: void setFilteringMetadata(OperationContext* opCtx, CollectionMetadata newMetadata) override; - void appendInfoForServerStatus(BSONArrayBuilder* builder) override; + size_t numberOfRangesScheduledForDeletion() const override; /** * Marks the collection's filtering metadata as UNKNOWN, meaning that all attempts to check for diff --git a/src/mongo/db/s/collection_sharding_state.cpp b/src/mongo/db/s/collection_sharding_state.cpp index c50c00a9a06..1e7c2e06056 100644 --- a/src/mongo/db/s/collection_sharding_state.cpp +++ b/src/mongo/db/s/collection_sharding_state.cpp @@ -92,16 +92,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(), + 0LL, + [](long long 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 2b46af3274c..6885b1d0c7e 100644 --- a/src/mongo/db/s/collection_sharding_state.h +++ b/src/mongo/db/s/collection_sharding_state.h @@ -182,9 +182,9 @@ public: virtual void setFilteringMetadata(OperationContext* opCtx, CollectionMetadata newMetadata) = 0; /** - * Append info to display 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; }; /** 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 c46090d2034..bf00246ab6f 100644 --- a/src/mongo/db/s/collection_sharding_state_factory_embedded.cpp +++ b/src/mongo/db/s/collection_sharding_state_factory_embedded.cpp @@ -83,9 +83,12 @@ public: } void toBSONPending(BSONArrayBuilder&) const override {} - void appendInfoForServerStatus(BSONArrayBuilder* builder) {} void setFilteringMetadata(OperationContext*, CollectionMetadata) 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 c2ca5dd0c47..a405f728c68 100644 --- a/src/mongo/db/s/collection_sharding_state_factory_standalone.cpp +++ b/src/mongo/db/s/collection_sharding_state_factory_standalone.cpp @@ -76,9 +76,12 @@ public: } void toBSONPending(BSONArrayBuilder& bb) const noexcept override {} - void appendInfoForServerStatus(BSONArrayBuilder* builder) override {} void setFilteringMetadata(OperationContext*, CollectionMetadata) noexcept 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 84bf965a0b9..92921daa893 100644 --- a/src/mongo/db/s/metadata_manager.cpp +++ b/src/mongo/db/s/metadata_manager.cpp @@ -342,19 +342,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()); @@ -481,6 +468,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 832fb7aade7..20f126eabbf 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. |