summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Noma <gregory.noma@gmail.com>2020-04-22 15:07:55 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-04-22 19:20:43 +0000
commitd0343420e4aa7520e4e2007090ba7a4c499ddae0 (patch)
treec5ecd76f3481633585168a72c2561af3235a8d8e
parent93f89d90ff3829181f9103f93780f32264dff929 (diff)
downloadmongo-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.js6
-rw-r--r--src/mongo/db/s/collection_sharding_runtime.cpp15
-rw-r--r--src/mongo/db/s/collection_sharding_runtime.h2
-rw-r--r--src/mongo/db/s/collection_sharding_state.cpp20
-rw-r--r--src/mongo/db/s/collection_sharding_state.h4
-rw-r--r--src/mongo/db/s/collection_sharding_state_factory_embedded.cpp5
-rw-r--r--src/mongo/db/s/collection_sharding_state_factory_standalone.cpp5
-rw-r--r--src/mongo/db/s/metadata_manager.cpp18
-rw-r--r--src/mongo/db/s/metadata_manager.h11
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.