diff options
Diffstat (limited to 'src/mongo/db/catalog_raii.cpp')
-rw-r--r-- | src/mongo/db/catalog_raii.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mongo/db/catalog_raii.cpp b/src/mongo/db/catalog_raii.cpp index 002fbaeda87..841b4a8c43f 100644 --- a/src/mongo/db/catalog_raii.cpp +++ b/src/mongo/db/catalog_raii.cpp @@ -27,6 +27,8 @@ * it in the license file. */ +#define MONGO_LOGV2_DEFAULT_COMPONENT ::mongo::logv2::LogComponent::kStorage + #include "mongo/platform/basic.h" #include "mongo/db/catalog_raii.h" @@ -36,6 +38,7 @@ #include "mongo/db/s/collection_sharding_state.h" #include "mongo/db/s/database_sharding_state.h" #include "mongo/db/views/view_catalog.h" +#include "mongo/logv2/log.h" #include "mongo/util/fail_point.h" namespace mongo { @@ -279,6 +282,30 @@ AutoGetCollectionLockFree::AutoGetCollectionLockFree(OperationContext* opCtx, !_view || viewMode == AutoGetCollectionViewMode::kViewsPermitted); } +AutoGetCollectionMaybeLockFree::AutoGetCollectionMaybeLockFree( + OperationContext* opCtx, + const NamespaceStringOrUUID& nsOrUUID, + LockMode modeColl, + AutoGetCollectionViewMode viewMode, + Date_t deadline) { + if (opCtx->isLockFreeReadsOp()) { + _autoGetLockFree.emplace(opCtx, + nsOrUUID, + [](std::shared_ptr<const Collection>& collection, + OperationContext* opCtx, + CollectionUUID uuid) { + LOGV2_FATAL( + 5342700, + "This is a nested lock helper and there was an attempt to " + "yield locks, which should be impossible"); + }, + viewMode, + deadline); + } else { + _autoGet.emplace(opCtx, nsOrUUID, modeColl, viewMode, deadline); + } +} + struct CollectionWriter::SharedImpl { SharedImpl(CollectionWriter* parent) : _parent(parent) {} |