summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/metadata_manager.h
diff options
context:
space:
mode:
authorMatthew Saltz <matthew.saltz@mongodb.com>2019-12-31 07:32:55 +0000
committerevergreen <evergreen@mongodb.com>2019-12-31 07:32:55 +0000
commit3b2a7ee28a282bcfd2b329443ed4f5a2130b11f3 (patch)
treea7efa0a2cf9b5b0f6074910526d30087404372a1 /src/mongo/db/s/metadata_manager.h
parent8e2c33cdf3552a7ba3a96fef162a3463f16a33eb (diff)
downloadmongo-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.h43
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;