diff options
author | Matthew Saltz <matthew.saltz@mongodb.com> | 2019-12-31 07:32:55 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-12-31 07:32:55 +0000 |
commit | 3b2a7ee28a282bcfd2b329443ed4f5a2130b11f3 (patch) | |
tree | a7efa0a2cf9b5b0f6074910526d30087404372a1 /src/mongo/db/s/metadata_manager.h | |
parent | 8e2c33cdf3552a7ba3a96fef162a3463f16a33eb (diff) | |
download | mongo-3b2a7ee28a282bcfd2b329443ed4f5a2130b11f3.tar.gz |
SERVER-45024 Make the MetadataManager a non-reusable object
Diffstat (limited to 'src/mongo/db/s/metadata_manager.h')
-rw-r--r-- | src/mongo/db/s/metadata_manager.h | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/src/mongo/db/s/metadata_manager.h b/src/mongo/db/s/metadata_manager.h index 90a0a7e233e..69fc46ec81a 100644 --- a/src/mongo/db/s/metadata_manager.h +++ b/src/mongo/db/s/metadata_manager.h @@ -48,31 +48,49 @@ namespace mongo { class RangePreserver; -class MetadataManager { - MetadataManager(const MetadataManager&) = delete; - MetadataManager& operator=(const MetadataManager&) = delete; - +/** + * Contains filtering metadata for a sharded collection. + */ +class MetadataManager : public std::enable_shared_from_this<MetadataManager> { public: using CleanupNotification = CollectionRangeDeleter::DeleteNotification; using Deletion = CollectionRangeDeleter::Deletion; MetadataManager(ServiceContext* serviceContext, NamespaceString nss, - executor::TaskExecutor* executor); + executor::TaskExecutor* executor, + CollectionMetadata initialMetadata); ~MetadataManager(); + MetadataManager(const MetadataManager&) = delete; + MetadataManager& operator=(const MetadataManager&) = delete; + /** - * If there is no filtering metadata set yet (setFilteringMetadata has not been called) returns - * boost::none. Otherwise increments the usage counter of the active metadata and returns an - * RAII object, which corresponds to it. + * Increments the usage counter of the active metadata and returns an RAII object, which + * corresponds to it. * * Holding a reference on a particular instance of the metadata means that orphan cleanup is not * allowed to run and delete chunks which are covered by that metadata. When the returned * ScopedCollectionMetadata goes out of scope, the reference counter on the metadata will be * decremented and if it reaches to zero, orphan cleanup may proceed. */ - boost::optional<ScopedCollectionMetadata> getActiveMetadata( - std::shared_ptr<MetadataManager> self, const boost::optional<LogicalTime>& atClusterTime); + ScopedCollectionMetadata getActiveMetadata(const boost::optional<LogicalTime>& atClusterTime); + + /** + * Returns the shard version of the active metadata object. + */ + ChunkVersion getActiveShardVersion() { + stdx::lock_guard<Latch> lg(_managerLock); + invariant(!_metadata.empty()); + return _metadata.back()->metadata->getShardVersion(); + } + + /** + * Returns the UUID of the collection tracked by this MetadataManager object. + */ + UUID getCollectionUuid() const { + return _collectionUuid; + } /** * Returns the number of CollectionMetadata objects being maintained on behalf of running @@ -90,8 +108,6 @@ public: void setFilteringMetadata(CollectionMetadata newMetadata); - void clearFilteringMetadata(); - void toBSONPending(BSONArrayBuilder& bb) const; /** @@ -236,6 +252,9 @@ private: // Namespace for which this manager object applies const NamespaceString _nss; + // The UUID for the collection tracked by this manager object. + const UUID _collectionUuid; + // The background task that deletes documents from orphaned chunk ranges. executor::TaskExecutor* const _executor; |