diff options
author | jannaerin <golden.janna@gmail.com> | 2018-08-03 12:05:07 -0400 |
---|---|---|
committer | jannaerin <golden.janna@gmail.com> | 2018-08-20 12:06:51 -0400 |
commit | 4aeeb5baaca7122162db2899904e264144bc85ca (patch) | |
tree | da0e0d7e0941a1ec6f1fbc61bef367cbf5ad277a | |
parent | 6f7c674d0a247b230dd11b3184d9f52524dd18cc (diff) | |
download | mongo-4aeeb5baaca7122162db2899904e264144bc85ca.tar.gz |
SERVER-36322 NamespaceSerializer lock should be used for dropCollection
(cherry picked from commit 7c2f9059b349fc01ab24130de4a9c5d0277516a3)
4 files changed, 14 insertions, 7 deletions
diff --git a/src/mongo/db/s/config/configsvr_create_collection_command.cpp b/src/mongo/db/s/config/configsvr_create_collection_command.cpp index 1748919c0a3..8a73252d00c 100644 --- a/src/mongo/db/s/config/configsvr_create_collection_command.cpp +++ b/src/mongo/db/s/config/configsvr_create_collection_command.cpp @@ -82,9 +82,9 @@ public: auto const catalogClient = Grid::get(opCtx)->catalogClient(); auto scopedDbLock = - ShardingCatalogManager::get(opCtx)->serializeCreateDatabase(opCtx, ns().db()); + ShardingCatalogManager::get(opCtx)->serializeCreateOrDropDatabase(opCtx, ns().db()); auto scopedCollLock = - ShardingCatalogManager::get(opCtx)->serializeCreateCollection(opCtx, ns()); + ShardingCatalogManager::get(opCtx)->serializeCreateOrDropCollection(opCtx, ns()); auto dbDistLock = uassertStatusOK(catalogClient->getDistLockManager()->lock( opCtx, ns().db(), "createCollection", DistLockManager::kDefaultLockTimeout)); diff --git a/src/mongo/db/s/config/configsvr_create_database_command.cpp b/src/mongo/db/s/config/configsvr_create_database_command.cpp index b38b43484c6..54edf37f718 100644 --- a/src/mongo/db/s/config/configsvr_create_database_command.cpp +++ b/src/mongo/db/s/config/configsvr_create_database_command.cpp @@ -89,7 +89,7 @@ public: [opCtx, dbname] { Grid::get(opCtx)->catalogCache()->purgeDatabase(dbname); }); auto scopedLock = - ShardingCatalogManager::get(opCtx)->serializeCreateDatabase(opCtx, dbname); + ShardingCatalogManager::get(opCtx)->serializeCreateOrDropDatabase(opCtx, dbname); auto dbDistLock = uassertStatusOK(Grid::get(opCtx)->catalogClient()->getDistLockManager()->lock( diff --git a/src/mongo/db/s/config/configsvr_drop_collection_command.cpp b/src/mongo/db/s/config/configsvr_drop_collection_command.cpp index 9ec8c60cb38..7ddffa0e359 100644 --- a/src/mongo/db/s/config/configsvr_drop_collection_command.cpp +++ b/src/mongo/db/s/config/configsvr_drop_collection_command.cpp @@ -115,6 +115,12 @@ public: } auto const catalogClient = Grid::get(opCtx)->catalogClient(); + + auto scopedDbLock = + ShardingCatalogManager::get(opCtx)->serializeCreateOrDropDatabase(opCtx, nss.db()); + auto scopedCollLock = + ShardingCatalogManager::get(opCtx)->serializeCreateOrDropCollection(opCtx, nss); + auto dbDistLock = uassertStatusOK( catalogClient->getDistLockManager()->lock(opCtx, nss.db(), "dropCollection", waitFor)); auto collDistLock = uassertStatusOK( diff --git a/src/mongo/db/s/config/sharding_catalog_manager.h b/src/mongo/db/s/config/sharding_catalog_manager.h index f4033d40006..050f729d15d 100644 --- a/src/mongo/db/s/config/sharding_catalog_manager.h +++ b/src/mongo/db/s/config/sharding_catalog_manager.h @@ -212,9 +212,9 @@ public: /** * Creates a ScopedLock on the database name in _namespaceSerializer. This is to prevent - * timeouts waiting on the dist lock if multiple threads attempt to create the same db. + * timeouts waiting on the dist lock if multiple threads attempt to create or drop the same db. */ - auto serializeCreateDatabase(OperationContext* opCtx, StringData dbName) { + auto serializeCreateOrDropDatabase(OperationContext* opCtx, StringData dbName) { return _namespaceSerializer.lock(opCtx, dbName); } @@ -299,9 +299,10 @@ public: /** * Creates a ScopedLock on the collection name in _namespaceSerializer. This is to prevent - * timeouts waiting on the dist lock if multiple threads attempt to create the same collection. + * timeouts waiting on the dist lock if multiple threads attempt to create or drop the same + * collection. */ - auto serializeCreateCollection(OperationContext* opCtx, const NamespaceString& ns) { + auto serializeCreateOrDropCollection(OperationContext* opCtx, const NamespaceString& ns) { return _namespaceSerializer.lock(opCtx, ns.ns()); } |