diff options
author | Geert Bosch <geert.bosch@mongodb.com> | 2019-11-12 19:47:39 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-11-12 19:47:39 +0000 |
commit | 2d8acdf659431d334b2a18ef2dc19162c8cd416f (patch) | |
tree | e7deead8ed713e7a30624d14f749bd2966495b40 | |
parent | 0dc87ca907a725308d21378dcf65380a64f31364 (diff) | |
download | mongo-2d8acdf659431d334b2a18ef2dc19162c8cd416f.tar.gz |
SERVER-44311 Change renameBetweenDBs to lock the source DB using MODE_IX
-rw-r--r-- | src/mongo/db/catalog/rename_collection.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/mongo/db/catalog/rename_collection.cpp b/src/mongo/db/catalog/rename_collection.cpp index a4aef447476..0731fa184e4 100644 --- a/src/mongo/db/catalog/rename_collection.cpp +++ b/src/mongo/db/catalog/rename_collection.cpp @@ -449,7 +449,10 @@ Status renameBetweenDBs(OperationContext* opCtx, boost::optional<Lock::DBLock> sourceDbLock; boost::optional<Lock::CollectionLock> sourceCollLock; if (!opCtx->lockState()->isCollectionLockedForMode(source, MODE_S)) { - sourceDbLock.emplace(opCtx, source.db(), MODE_IS); + // Lock the DB using MODE_IX to ensure we have the global lock in that mode, as to prevent + // upgrade from MODE_IS to MODE_IX, which caused deadlock on systems not supporting Database + // locking and should be avoided in general. + sourceDbLock.emplace(opCtx, source.db(), MODE_IX); sourceCollLock.emplace(opCtx, source, MODE_S); } |