diff options
author | jannaerin <golden.janna@gmail.com> | 2018-05-18 11:50:34 -0400 |
---|---|---|
committer | jannaerin <golden.janna@gmail.com> | 2018-05-23 15:33:25 -0400 |
commit | c8497a2c85e65680b439603caba6874b54082355 (patch) | |
tree | c9f1b3335608c64143c24825cc72d9475c6db3bf /src/mongo/s/catalog/sharding_catalog_manager.h | |
parent | 48130ffebe242959eac9b685e6ea46373f4fddb3 (diff) | |
download | mongo-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.h | 11 |
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 |