summaryrefslogtreecommitdiff
path: root/src/mongo/s/sharding_initialization.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/sharding_initialization.cpp')
-rw-r--r--src/mongo/s/sharding_initialization.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/src/mongo/s/sharding_initialization.cpp b/src/mongo/s/sharding_initialization.cpp
index cb39903bb21..e6d425d3128 100644
--- a/src/mongo/s/sharding_initialization.cpp
+++ b/src/mongo/s/sharding_initialization.cpp
@@ -32,17 +32,26 @@
#include "mongo/s/sharding_initialization.h"
+#include <string>
+
#include "mongo/base/status.h"
#include "mongo/client/connection_string.h"
#include "mongo/client/remote_command_targeter_factory_impl.h"
#include "mongo/executor/network_interface_factory.h"
#include "mongo/executor/task_executor.h"
#include "mongo/executor/thread_pool_task_executor.h"
+#include "mongo/db/server_options.h"
+#include "mongo/db/service_context.h"
+#include "mongo/s/catalog/dist_lock_catalog_impl.h"
#include "mongo/s/catalog/legacy/catalog_manager_legacy.h"
+#include "mongo/s/catalog/replset/catalog_manager_replica_set.h"
+#include "mongo/s/catalog/replset/replset_dist_lock_manager.h"
#include "mongo/s/client/shard_registry.h"
#include "mongo/s/grid.h"
#include "mongo/stdx/memory.h"
#include "mongo/util/concurrency/thread_pool.h"
+#include "mongo/util/mongoutils/str.h"
+#include "mongo/util/net/sock.h"
namespace mongo {
@@ -68,10 +77,33 @@ Status initializeGlobalShardingState(const ConnectionString& configCS) {
makeTaskExecutor(std::move(network)),
networkPtr));
- auto catalogManager = stdx::make_unique<CatalogManagerLegacy>();
- Status status = catalogManager->init(configCS);
- if (!status.isOK()) {
- return status;
+ std::unique_ptr<CatalogManager> catalogManager;
+ if (configCS.type() == ConnectionString::SET) {
+ auto distLockCatalog = stdx::make_unique<DistLockCatalogImpl>(
+ shardRegistry.get(), ReplSetDistLockManager::kDistLockWriteConcernTimeout);
+
+ const std::string distLockProcessId = str::stream()
+ << getHostName() << ":" << serverGlobalParams.port << ":" << time(0) << ":" << rand();
+ auto distLockManager = stdx::make_unique<ReplSetDistLockManager>(
+ getGlobalServiceContext(),
+ distLockProcessId,
+ std::move(distLockCatalog),
+ ReplSetDistLockManager::kDistLockPingInterval,
+ ReplSetDistLockManager::kDistLockExpirationTime);
+
+ auto catalogManagerReplicaSet = stdx::make_unique<CatalogManagerReplicaSet>();
+ Status status = catalogManagerReplicaSet->init(configCS, std::move(distLockManager));
+ if (!status.isOK()) {
+ return status;
+ }
+ catalogManager = std::move(catalogManagerReplicaSet);
+ } else {
+ auto catalogManagerLegacy = stdx::make_unique<CatalogManagerLegacy>();
+ Status status = catalogManagerLegacy->init(configCS);
+ if (!status.isOK()) {
+ return status;
+ }
+ catalogManager = std::move(catalogManagerLegacy);
}
shardRegistry->init(catalogManager.get());