diff options
author | Daniel Solnik <dansolnik@gmail.com> | 2019-07-30 14:11:50 -0400 |
---|---|---|
committer | Daniel Solnik <dansolnik@gmail.com> | 2019-08-13 11:14:30 -0400 |
commit | af7a4a8a840f1a519045a165f558047d9c8af158 (patch) | |
tree | 67db81993d9d1286b85fc9f10aadb9feae6791a2 /src/mongo/db/catalog/collection_catalog.cpp | |
parent | 862995e019c7655a558fc926ba24a1780c55ec8d (diff) | |
download | mongo-af7a4a8a840f1a519045a165f558047d9c8af158.tar.gz |
SERVER-42527 Create CollectionLock constructor that uses UUID
Diffstat (limited to 'src/mongo/db/catalog/collection_catalog.cpp')
-rw-r--r-- | src/mongo/db/catalog/collection_catalog.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/mongo/db/catalog/collection_catalog.cpp b/src/mongo/db/catalog/collection_catalog.cpp index c32c11405fc..2b8d22fa6ee 100644 --- a/src/mongo/db/catalog/collection_catalog.cpp +++ b/src/mongo/db/catalog/collection_catalog.cpp @@ -286,6 +286,28 @@ boost::optional<CollectionUUID> CollectionCatalog::lookupUUIDByNSS( return boost::none; } +NamespaceString CollectionCatalog::resolveNamespaceStringOrUUID(NamespaceStringOrUUID nsOrUUID) { + if (auto& nss = nsOrUUID.nss()) { + uassert(ErrorCodes::InvalidNamespace, + str::stream() << "Namespace " << *nss << " is not a valid collection name", + nss->isValid()); + return std::move(*nss); + } + + auto resolvedNss = lookupNSSByUUID(*nsOrUUID.uuid()); + + uassert(ErrorCodes::NamespaceNotFound, + str::stream() << "Unable to resolve " << nsOrUUID.toString(), + resolvedNss && resolvedNss->isValid()); + + uassert(ErrorCodes::NamespaceNotFound, + str::stream() << "UUID " << nsOrUUID.toString() << " specified in " << nsOrUUID.dbname() + << " resolved to a collection in a different database: " << *resolvedNss, + resolvedNss->db() == nsOrUUID.dbname()); + + return std::move(*resolvedNss); +} + bool CollectionCatalog::checkIfCollectionSatisfiable(CollectionUUID uuid, CollectionInfoFn predicate) const { invariant(predicate); |