From 24e418966985b9bbaaa497f92dfbc69a2420e649 Mon Sep 17 00:00:00 2001 From: Kaloian Manassiev Date: Fri, 7 Jul 2017 13:42:56 -0400 Subject: SERVER-30053 Get rid of the ShardingCatalogManager interface As part of this change also moves ShardingCatalogManager to be a decoration on ServiceContext and decouples the dependency between the 'connPoolStats' command and ShardingCatalogManager. --- src/mongo/s/sharding_initialization.cpp | 60 +++++++++++---------------------- 1 file changed, 19 insertions(+), 41 deletions(-) (limited to 'src/mongo/s/sharding_initialization.cpp') diff --git a/src/mongo/s/sharding_initialization.cpp b/src/mongo/s/sharding_initialization.cpp index 79287e37a5c..49931ed353a 100644 --- a/src/mongo/s/sharding_initialization.cpp +++ b/src/mongo/s/sharding_initialization.cpp @@ -59,7 +59,6 @@ #include "mongo/s/catalog/dist_lock_catalog_impl.h" #include "mongo/s/catalog/replset_dist_lock_manager.h" #include "mongo/s/catalog/sharding_catalog_client_impl.h" -#include "mongo/s/catalog/sharding_catalog_manager_impl.h" #include "mongo/s/catalog_cache.h" #include "mongo/s/client/shard_factory.h" #include "mongo/s/client/shard_registry.h" @@ -100,23 +99,14 @@ using executor::NetworkInterface; using executor::NetworkInterfaceThreadPool; using executor::TaskExecutorPool; using executor::ThreadPoolTaskExecutor; -using executor::ShardingTaskExecutor; static constexpr auto kRetryInterval = Seconds{2}; const std::string kKeyManagerPurposeString = "HMAC"; const Seconds kKeyValidInterval(3 * 30 * 24 * 60 * 60); // ~3 months -auto makeTaskExecutor(std::unique_ptr net) { - auto netPtr = net.get(); - auto executor = stdx::make_unique( - stdx::make_unique(netPtr), std::move(net)); - return stdx::make_unique(std::move(executor)); -} - std::unique_ptr makeCatalogClient(ServiceContext* service, - ShardRegistry* shardRegistry, StringData distLockProcessId) { - auto distLockCatalog = stdx::make_unique(shardRegistry); + auto distLockCatalog = stdx::make_unique(); auto distLockManager = stdx::make_unique(service, distLockProcessId, @@ -127,14 +117,14 @@ std::unique_ptr makeCatalogClient(ServiceContext* service return stdx::make_unique(std::move(distLockManager)); } -std::unique_ptr makeTaskExecutorPool( +std::unique_ptr makeShardingTaskExecutorPool( std::unique_ptr fixedNet, rpc::ShardingEgressMetadataHookBuilder metadataHookBuilder, ConnectionPool::Options connPoolOptions) { std::vector> executors; for (size_t i = 0; i < TaskExecutorPool::getSuggestedPoolSize(); ++i) { - auto exec = makeTaskExecutor(executor::makeNetworkInterface( + auto exec = makeShardingTaskExecutor(executor::makeNetworkInterface( "NetworkInterfaceASIO-TaskExecutorPool-" + std::to_string(i), stdx::make_unique(), metadataHookBuilder(), @@ -144,7 +134,7 @@ std::unique_ptr makeTaskExecutorPool( } // Add executor used to perform non-performance critical work. - auto fixedExec = makeTaskExecutor(std::move(fixedNet)); + auto fixedExec = makeShardingTaskExecutor(std::move(fixedNet)); auto executorPool = stdx::make_unique(); executorPool->addExecutors(std::move(executors), std::move(fixedExec)); @@ -153,7 +143,14 @@ std::unique_ptr makeTaskExecutorPool( } // namespace -const StringData kDistLockProcessIdForConfigServer("ConfigServer"); +std::unique_ptr makeShardingTaskExecutor( + std::unique_ptr net) { + auto netPtr = net.get(); + auto executor = stdx::make_unique( + stdx::make_unique(netPtr), std::move(net)); + + return stdx::make_unique(std::move(executor)); +} std::string generateDistLockProcessId(OperationContext* opCtx) { std::unique_ptr rng(SecureRandom::create()); @@ -170,8 +167,7 @@ Status initializeGlobalShardingState(OperationContext* opCtx, StringData distLockProcessId, std::unique_ptr shardFactory, std::unique_ptr catalogCache, - rpc::ShardingEgressMetadataHookBuilder hookBuilder, - ShardingCatalogManagerBuilder catalogManagerBuilder) { + rpc::ShardingEgressMetadataHookBuilder hookBuilder) { if (configCS.type() == ConnectionString::INVALID) { return {ErrorCodes::BadValue, "Unrecognized connection string."}; } @@ -197,27 +193,15 @@ Status initializeGlobalShardingState(OperationContext* opCtx, hookBuilder(), connPoolOptions); auto networkPtr = network.get(); - auto executorPool = makeTaskExecutorPool(std::move(network), hookBuilder, connPoolOptions); + auto executorPool = + makeShardingTaskExecutorPool(std::move(network), hookBuilder, connPoolOptions); executorPool->startup(); - auto shardRegistry(stdx::make_unique(std::move(shardFactory), configCS)); - - auto catalogClient = - makeCatalogClient(opCtx->getServiceContext(), shardRegistry.get(), distLockProcessId); - - auto rawCatalogClient = catalogClient.get(); - - std::unique_ptr catalogManager = catalogManagerBuilder( - rawCatalogClient, - makeTaskExecutor(executor::makeNetworkInterface("AddShard-TaskExecutor"))); - auto rawCatalogManager = catalogManager.get(); - auto const grid = Grid::get(opCtx); grid->init( - std::move(catalogClient), - std::move(catalogManager), + makeCatalogClient(opCtx->getServiceContext(), distLockProcessId), std::move(catalogCache), - std::move(shardRegistry), + stdx::make_unique(std::move(shardFactory), configCS), stdx::make_unique(getGlobalServiceContext()->getPreciseClockSource()), stdx::make_unique(), std::move(executorPool), @@ -226,16 +210,9 @@ Status initializeGlobalShardingState(OperationContext* opCtx, // The shard registry must be started once the grid is initialized grid->shardRegistry()->startup(opCtx); + // The catalog client must be started after the shard registry has been started up grid->catalogClient()->startup(); - if (serverGlobalParams.clusterRole == ClusterRole::ConfigServer) { - // Only config servers get a ShardingCatalogManager. - Status status = rawCatalogManager->startup(); - if (!status.isOK()) { - return status; - } - } - auto keyManager = std::make_shared( kKeyManagerPurposeString, grid->catalogClient(), Seconds(KeysRotationIntervalSec)); keyManager->startMonitoring(opCtx->getServiceContext()); @@ -249,6 +226,7 @@ Status initializeGlobalShardingState(OperationContext* opCtx, replCoord->getMemberState().primary()) { LogicalTimeValidator::get(opCtx)->enableKeyGenerator(opCtx, true); } + return Status::OK(); } -- cgit v1.2.1