diff options
author | Henrik Edin <henrik.edin@mongodb.com> | 2020-11-03 12:42:38 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-11-13 20:15:34 +0000 |
commit | 8f9823f644d0b6beba8a301866141a578d278534 (patch) | |
tree | 1ef4bc439da93a2b39cff7c96a975668c27e7070 /src/mongo/db/concurrency | |
parent | b670258ac185ecea0492c742f2f50da9d8ab618f (diff) | |
download | mongo-8f9823f644d0b6beba8a301866141a578d278534.tar.gz |
SERVER-52556 Versioned CollectionCatalog. Writes are performed using copy-on-write.
Internal mutexes when reading CollectionCatalog are removed, just one mutex for writes are needed.
Lock-free reads helper AutoGetCollectionForReadLockFree stashes a CollectionCatalog consistent with snapshot on OperationContext
Diffstat (limited to 'src/mongo/db/concurrency')
-rw-r--r-- | src/mongo/db/concurrency/d_concurrency.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/concurrency/lock_manager.cpp | 4 |
2 files changed, 4 insertions, 5 deletions
diff --git a/src/mongo/db/concurrency/d_concurrency.cpp b/src/mongo/db/concurrency/d_concurrency.cpp index ea4738e55aa..abbd0c875c2 100644 --- a/src/mongo/db/concurrency/d_concurrency.cpp +++ b/src/mongo/db/concurrency/d_concurrency.cpp @@ -273,8 +273,7 @@ Lock::CollectionLock::CollectionLock(OperationContext* opCtx, // 'nsOrUUID' must be a UUID and dbName. - auto& collectionCatalog = CollectionCatalog::get(opCtx); - auto nss = collectionCatalog.resolveNamespaceStringOrUUID(opCtx, nssOrUUID); + auto nss = CollectionCatalog::get(opCtx)->resolveNamespaceStringOrUUID(opCtx, nssOrUUID); // The UUID cannot move between databases so this one dassert is sufficient. dassert(_opCtx->lockState()->isDbLockedForMode(nss.db(), @@ -297,7 +296,7 @@ Lock::CollectionLock::CollectionLock(OperationContext* opCtx, // We looked up UUID without a collection lock so it's possible that the // collection name changed now. Look it up again. prevResolvedNss = nss; - nss = collectionCatalog.resolveNamespaceStringOrUUID(opCtx, nssOrUUID); + nss = CollectionCatalog::get(opCtx)->resolveNamespaceStringOrUUID(opCtx, nssOrUUID); } while (nss != prevResolvedNss); } diff --git a/src/mongo/db/concurrency/lock_manager.cpp b/src/mongo/db/concurrency/lock_manager.cpp index e81bc2f46ff..25987286caf 100644 --- a/src/mongo/db/concurrency/lock_manager.cpp +++ b/src/mongo/db/concurrency/lock_manager.cpp @@ -954,8 +954,8 @@ std::string ResourceId::toString() const { } if (getType() == RESOURCE_DATABASE || getType() == RESOURCE_COLLECTION) { - CollectionCatalog& catalog = CollectionCatalog::get(getGlobalServiceContext()); - boost::optional<std::string> resourceName = catalog.lookupResourceName(*this); + auto catalog = CollectionCatalog::get(getGlobalServiceContext()); + boost::optional<std::string> resourceName = catalog->lookupResourceName(*this); if (resourceName) { ss << ", " << *resourceName; } |