diff options
author | Jordi Serra Torrens <jordi.serra-torrens@mongodb.com> | 2021-04-19 16:09:25 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-04-21 06:23:22 +0000 |
commit | c90de3e65fff76ead7b8ca4664c3f34b0c913e04 (patch) | |
tree | 1a60449271d54d5d3d3058534d6a3d1a67c34b3a /src/mongo/db/s/shardsvr_rename_collection_command.cpp | |
parent | 6f17871c955dbf98a5ffcd27dab2390d90b875d1 (diff) | |
download | mongo-c90de3e65fff76ead7b8ca4664c3f34b0c913e04.tar.gz |
SERVER-39468: Take distLocks on legacy renameCollection
Diffstat (limited to 'src/mongo/db/s/shardsvr_rename_collection_command.cpp')
-rw-r--r-- | src/mongo/db/s/shardsvr_rename_collection_command.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/mongo/db/s/shardsvr_rename_collection_command.cpp b/src/mongo/db/s/shardsvr_rename_collection_command.cpp index 7274696e8f1..83d861e6069 100644 --- a/src/mongo/db/s/shardsvr_rename_collection_command.cpp +++ b/src/mongo/db/s/shardsvr_rename_collection_command.cpp @@ -36,6 +36,7 @@ #include "mongo/db/commands.h" #include "mongo/db/db_raii.h" #include "mongo/db/s/collection_sharding_state.h" +#include "mongo/db/s/dist_lock_manager.h" #include "mongo/db/s/rename_collection_coordinator.h" #include "mongo/db/s/rename_collection_coordinator_document_gen.h" #include "mongo/db/s/sharding_ddl_50_upgrade_downgrade.h" @@ -69,6 +70,15 @@ RenameCollectionResponse renameCollectionLegacy(OperationContext* opCtx, const NamespaceString& fromNss) { const auto& toNss = request.getTo(); + auto fromDbDistLock = uassertStatusOK(DistLockManager::get(opCtx)->lock( + opCtx, fromNss.db(), "renameCollection", DistLockManager::kDefaultLockTimeout)); + + auto fromCollDistLock = uassertStatusOK(DistLockManager::get(opCtx)->lock( + opCtx, fromNss.ns(), "renameCollection", DistLockManager::kDefaultLockTimeout)); + + auto toCollDistLock = uassertStatusOK(DistLockManager::get(opCtx)->lock( + opCtx, toNss.ns(), "renameCollection", DistLockManager::kDefaultLockTimeout)); + // Make sure that source and target collection are not sharded uassert(ErrorCodes::IllegalOperation, str::stream() << "source namespace '" << fromNss << "' must not be sharded", |