summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/collection_catalog.cpp
diff options
context:
space:
mode:
authorDaniel Solnik <dansolnik@gmail.com>2019-07-30 14:11:50 -0400
committerDaniel Solnik <dansolnik@gmail.com>2019-08-13 11:14:30 -0400
commitaf7a4a8a840f1a519045a165f558047d9c8af158 (patch)
tree67db81993d9d1286b85fc9f10aadb9feae6791a2 /src/mongo/db/catalog/collection_catalog.cpp
parent862995e019c7655a558fc926ba24a1780c55ec8d (diff)
downloadmongo-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.cpp22
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);