summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog_raii.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_raii.cpp
parent862995e019c7655a558fc926ba24a1780c55ec8d (diff)
downloadmongo-af7a4a8a840f1a519045a165f558047d9c8af158.tar.gz
SERVER-42527 Create CollectionLock constructor that uses UUID
Diffstat (limited to 'src/mongo/db/catalog_raii.cpp')
-rw-r--r--src/mongo/db/catalog_raii.cpp38
1 files changed, 3 insertions, 35 deletions
diff --git a/src/mongo/db/catalog_raii.cpp b/src/mongo/db/catalog_raii.cpp
index 86599eff65c..97fa4792599 100644
--- a/src/mongo/db/catalog_raii.cpp
+++ b/src/mongo/db/catalog_raii.cpp
@@ -62,18 +62,10 @@ AutoGetCollection::AutoGetCollection(OperationContext* opCtx,
: _autoDb(opCtx,
!nsOrUUID.dbname().empty() ? nsOrUUID.dbname() : nsOrUUID.nss()->db(),
isSharedLockMode(modeColl) ? MODE_IS : MODE_IX,
- deadline),
- _resolvedNss(resolveNamespaceStringOrUUID(opCtx, nsOrUUID)) {
+ deadline) {
- NamespaceString prevResolvedNss;
- do {
- _collLock.emplace(opCtx, _resolvedNss, modeColl, deadline);
-
- // We looked up nsOrUUID without a collection lock so it's possible that the
- // collection is dropped now. Look it up again.
- prevResolvedNss = _resolvedNss;
- _resolvedNss = resolveNamespaceStringOrUUID(opCtx, nsOrUUID);
- } while (_resolvedNss != prevResolvedNss);
+ _collLock.emplace(opCtx, nsOrUUID, modeColl, deadline);
+ _resolvedNss = CollectionCatalog::get(opCtx).resolveNamespaceStringOrUUID(nsOrUUID);
// Wait for a configured amount of time after acquiring locks if the failpoint is enabled
MONGO_FAIL_POINT_BLOCK(setAutoGetCollectionWait, customWait) {
@@ -137,30 +129,6 @@ AutoGetCollection::AutoGetCollection(OperationContext* opCtx,
!_view || viewMode == kViewsPermitted);
}
-NamespaceString AutoGetCollection::resolveNamespaceStringOrUUID(OperationContext* opCtx,
- NamespaceStringOrUUID nsOrUUID) {
- if (auto& nss = nsOrUUID.nss()) {
- uassert(ErrorCodes::InvalidNamespace,
- str::stream() << "Namespace " << *nss << " is not a valid collection name",
- nss->isValid());
- return *nss;
- }
-
- CollectionCatalog& catalog = CollectionCatalog::get(opCtx);
- auto resolvedNss = catalog.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 *resolvedNss;
-}
-
AutoGetOrCreateDb::AutoGetOrCreateDb(OperationContext* opCtx,
StringData dbName,
LockMode mode,