summaryrefslogtreecommitdiff
path: root/src/mongo/db/concurrency
diff options
context:
space:
mode:
authorHenrik Edin <henrik.edin@mongodb.com>2020-11-03 12:42:38 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-11-13 20:15:34 +0000
commit8f9823f644d0b6beba8a301866141a578d278534 (patch)
tree1ef4bc439da93a2b39cff7c96a975668c27e7070 /src/mongo/db/concurrency
parentb670258ac185ecea0492c742f2f50da9d8ab618f (diff)
downloadmongo-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.cpp5
-rw-r--r--src/mongo/db/concurrency/lock_manager.cpp4
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;
}