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_raii.cpp | |
parent | 862995e019c7655a558fc926ba24a1780c55ec8d (diff) | |
download | mongo-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.cpp | 38 |
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, |