diff options
author | Xiangyu Yao <xiangyu.yao@mongodb.com> | 2019-04-25 14:54:48 -0400 |
---|---|---|
committer | Xiangyu Yao <xiangyu.yao@mongodb.com> | 2019-04-25 15:11:04 -0400 |
commit | 3a8c33cd95abaa7455b2c01726bdbf413cc938e5 (patch) | |
tree | 568bf26f33eaea6c5f6ccf87c2d58b438cd5fc0e /src/mongo/db/catalog_raii.cpp | |
parent | aa4903255505f9072581e8ea4c63b93093f04508 (diff) | |
download | mongo-3a8c33cd95abaa7455b2c01726bdbf413cc938e5.tar.gz |
SERVER-39520 Use database IX lock for dropCollection
Diffstat (limited to 'src/mongo/db/catalog_raii.cpp')
-rw-r--r-- | src/mongo/db/catalog_raii.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/mongo/db/catalog_raii.cpp b/src/mongo/db/catalog_raii.cpp index 20bf489ca71..aee75fed1f8 100644 --- a/src/mongo/db/catalog_raii.cpp +++ b/src/mongo/db/catalog_raii.cpp @@ -75,7 +75,17 @@ AutoGetCollection::AutoGetCollection(OperationContext* opCtx, modeDB, deadline), _resolvedNss(resolveNamespaceStringOrUUID(opCtx, nsOrUUID)) { - _collLock.emplace(opCtx, _resolvedNss, modeColl, deadline); + + NamespaceString resolvedNssWithLock; + 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. + resolvedNssWithLock = resolveNamespaceStringOrUUID(opCtx, nsOrUUID); + } while (_resolvedNss != resolvedNssWithLock); + _resolvedNss = resolvedNssWithLock; + // Wait for a configured amount of time after acquiring locks if the failpoint is enabled MONGO_FAIL_POINT_BLOCK(setAutoGetCollectionWait, customWait) { const BSONObj& data = customWait.getData(); |