summaryrefslogtreecommitdiff
path: root/src/mongo
diff options
context:
space:
mode:
authorGregory Noma <gregory.noma@gmail.com>2020-04-21 13:51:04 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-04-21 18:05:40 +0000
commitfa945325938ada67a088e7dbe951404d092e8771 (patch)
treebcf81a765d3f565d3cfc425f2c576136c03e42f4 /src/mongo
parent3ebb641b1c0fb63243e801b966ccde1167fdada9 (diff)
downloadmongo-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.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
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.