summaryrefslogtreecommitdiff
path: root/src/mongo/s/catalog/sharding_catalog_manager.h
diff options
context:
space:
mode:
authorjannaerin <golden.janna@gmail.com>2018-05-18 11:50:34 -0400
committerjannaerin <golden.janna@gmail.com>2018-05-23 15:33:25 -0400
commitc8497a2c85e65680b439603caba6874b54082355 (patch)
treec9f1b3335608c64143c24825cc72d9475c6db3bf /src/mongo/s/catalog/sharding_catalog_manager.h
parent48130ffebe242959eac9b685e6ea46373f4fddb3 (diff)
downloadmongo-c8497a2c85e65680b439603caba6874b54082355.tar.gz
SERVER-33639 Protect against distlock acquisition timeout at createDatabase time
Diffstat (limited to 'src/mongo/s/catalog/sharding_catalog_manager.h')
-rw-r--r--src/mongo/s/catalog/sharding_catalog_manager.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/mongo/s/catalog/sharding_catalog_manager.h b/src/mongo/s/catalog/sharding_catalog_manager.h
index 670c57fb678..56457993a78 100644
--- a/src/mongo/s/catalog/sharding_catalog_manager.h
+++ b/src/mongo/s/catalog/sharding_catalog_manager.h
@@ -33,6 +33,7 @@
#include "mongo/db/concurrency/d_concurrency.h"
#include "mongo/db/repl/optime_with.h"
#include "mongo/executor/task_executor.h"
+#include "mongo/s/catalog/namespace_serializer.h"
#include "mongo/s/catalog/type_chunk.h"
#include "mongo/s/catalog/type_database.h"
#include "mongo/s/catalog/type_shard.h"
@@ -203,6 +204,14 @@ public:
DatabaseType createDatabase(OperationContext* opCtx, const std::string& dbName);
/**
+ * 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.
+ */
+ auto serializeCreateDatabase(OperationContext* opCtx, StringData dbName) {
+ return _namespaceSerializer.lock(opCtx, dbName);
+ }
+
+ /**
* Creates the database if it does not exist, then marks its entry in config.databases as
* sharding-enabled.
*
@@ -478,6 +487,8 @@ private:
* be removed while they are running (such as removeShardFromZone) to take this in shared mode.
*/
Lock::ResourceMutex _kShardMembershipLock;
+
+ NamespaceSerializer _namespaceSerializer;
};
} // namespace mongo