summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjannaerin <golden.janna@gmail.com>2018-08-03 12:05:07 -0400
committerjannaerin <golden.janna@gmail.com>2018-08-20 12:06:51 -0400
commit4aeeb5baaca7122162db2899904e264144bc85ca (patch)
treeda0e0d7e0941a1ec6f1fbc61bef367cbf5ad277a
parent6f7c674d0a247b230dd11b3184d9f52524dd18cc (diff)
downloadmongo-4aeeb5baaca7122162db2899904e264144bc85ca.tar.gz
SERVER-36322 NamespaceSerializer lock should be used for dropCollection
(cherry picked from commit 7c2f9059b349fc01ab24130de4a9c5d0277516a3)
-rw-r--r--src/mongo/db/s/config/configsvr_create_collection_command.cpp4
-rw-r--r--src/mongo/db/s/config/configsvr_create_database_command.cpp2
-rw-r--r--src/mongo/db/s/config/configsvr_drop_collection_command.cpp6
-rw-r--r--src/mongo/db/s/config/sharding_catalog_manager.h9
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());
}