diff options
author | Pierlauro Sciarelli <pierlauro.sciarelli@mongodb.com> | 2021-05-18 08:55:52 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-05-18 11:02:42 +0000 |
commit | 3ce2c1f02f4961c024ec52f1a9f27fd6263a5aac (patch) | |
tree | f66fd614bb6611a0f5375c7fe7b035664208eda6 /src | |
parent | 593376ad56a8f759faf7f8ad743cbbff5dbf1cf1 (diff) | |
download | mongo-3ce2c1f02f4961c024ec52f1a9f27fd6263a5aac.tar.gz |
SERVER-57021 Release locks before DB refresh in rename coordinator
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/db/s/rename_collection_coordinator.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/mongo/db/s/rename_collection_coordinator.cpp b/src/mongo/db/s/rename_collection_coordinator.cpp index d5dbc59f41e..4850ba2f196 100644 --- a/src/mongo/db/s/rename_collection_coordinator.cpp +++ b/src/mongo/db/s/rename_collection_coordinator.cpp @@ -186,20 +186,23 @@ ExecutorFuture<void> RenameCollectionCoordinator::_runImpl( _doc.setOptShardedCollInfo(optSourceCollType); _doc.setSourceUUID(optSourceCollType->getUuid()); } else { - Lock::DBLock dbLock(opCtx, fromNss.db(), MODE_IS); - Lock::CollectionLock collLock(opCtx, fromNss, MODE_IS); - const auto sourceCollPtr = - CollectionCatalog::get(opCtx)->lookupCollectionByNamespace(opCtx, fromNss); - - uassert(ErrorCodes::NamespaceNotFound, - str::stream() << "Collection " << fromNss << " doesn't exist.", - sourceCollPtr); + { + Lock::DBLock dbLock(opCtx, fromNss.db(), MODE_IS); + Lock::CollectionLock collLock(opCtx, fromNss, MODE_IS); + const auto sourceCollPtr = + CollectionCatalog::get(opCtx)->lookupCollectionByNamespace(opCtx, + fromNss); + + uassert(ErrorCodes::NamespaceNotFound, + str::stream() << "Collection " << fromNss << " doesn't exist.", + sourceCollPtr); + + _doc.setSourceUUID(sourceCollPtr->uuid()); + } if (fromNss.db() != toNss.db()) { sharding_ddl_util::checkDbPrimariesOnTheSameShard(opCtx, fromNss, toNss); } - - _doc.setSourceUUID(sourceCollPtr->uuid()); } // Make sure the target namespace is not a view |