diff options
author | Spencer T Brody <spencer@mongodb.com> | 2015-07-14 18:33:39 -0400 |
---|---|---|
committer | Spencer T Brody <spencer@mongodb.com> | 2015-07-16 11:37:38 -0400 |
commit | 6b5142950b1b5452fc29621ee01abe9c81eaee2c (patch) | |
tree | 7a9c75ade059781381e04ce7c9eac46935cd43f6 /src/mongo/s/server.cpp | |
parent | 69861af0f5d1f569d04b22fbf3ad408403aeca27 (diff) | |
download | mongo-6b5142950b1b5452fc29621ee01abe9c81eaee2c.tar.gz |
SERVER-19414 Clean up ShardRegistry initialization
Diffstat (limited to 'src/mongo/s/server.cpp')
-rw-r--r-- | src/mongo/s/server.cpp | 78 |
1 files changed, 42 insertions, 36 deletions
diff --git a/src/mongo/s/server.cpp b/src/mongo/s/server.cpp index 14e72cf4dbe..c413a171988 100644 --- a/src/mongo/s/server.cpp +++ b/src/mongo/s/server.cpp @@ -196,6 +196,41 @@ DBClientBase* createDirectClient(OperationContext* txn) { using namespace mongo; +static Status initializeSharding(bool doUpgrade) { + auto network = executor::makeNetworkInterface(); + auto networkPtr = network.get(); + auto shardRegistry(stdx::make_unique<ShardRegistry>( + stdx::make_unique<RemoteCommandTargeterFactoryImpl>(), + stdx::make_unique<repl::ReplicationExecutor>(network.release(), nullptr, 0), + networkPtr)); + + auto catalogManager = stdx::make_unique<CatalogManagerLegacy>(); + Status status = catalogManager->init(mongosGlobalParams.configdbs); + if (!status.isOK()) { + return status; + } + + shardRegistry->init(catalogManager.get()); + shardRegistry->startup(); + grid.init(std::move(catalogManager), std::move(shardRegistry)); + + + status = grid.catalogManager()->checkAndUpgrade(!doUpgrade); + if (!status.isOK()) { + return status; + } + + if (doUpgrade) { + return Status::OK(); + } + + status = grid.catalogManager()->startup(); + if (!status.isOK()) { + return status; + } + return Status::OK(); +} + static ExitCode runMongosServer(bool doUpgrade) { setThreadName("mongosMain"); printShardingVersionInfo(false); @@ -217,42 +252,13 @@ static ExitCode runMongosServer(bool doUpgrade) { dbexit(EXIT_BADOPTIONS); } - auto catalogManager = stdx::make_unique<CatalogManagerLegacy>(); - - { - Status statusCatalogManagerInit = catalogManager->init(mongosGlobalParams.configdbs); - if (!statusCatalogManagerInit.isOK()) { - error() << "couldn't initialize catalog manager " << statusCatalogManagerInit; - return EXIT_SHARDING_ERROR; - } + Status status = initializeSharding(doUpgrade); + if (!status.isOK()) { + error() << "Error initializing sharding system: " << status; + return EXIT_SHARDING_ERROR; } - - auto shardRegistry(stdx::make_unique<ShardRegistry>( - stdx::make_unique<RemoteCommandTargeterFactoryImpl>(), - stdx::make_unique<repl::ReplicationExecutor>( - executor::makeNetworkInterface().release(), nullptr, 0), - nullptr, - catalogManager.get())); - shardRegistry->startup(); - - grid.init(std::move(catalogManager), std::move(shardRegistry)); - - { - auto upgradeStatus = grid.catalogManager()->checkAndUpgrade(!doUpgrade); - if (!upgradeStatus.isOK()) { - error() << causedBy(upgradeStatus); - return EXIT_SHARDING_ERROR; - } - - if (doUpgrade) { - return EXIT_CLEAN; - } - - Status startupStatus = grid.catalogManager()->startup(); - if (!startupStatus.isOK()) { - error() << "Mongos catalog manager startup failed: " << startupStatus; - return EXIT_SHARDING_ERROR; - } + if (doUpgrade) { + return EXIT_CLEAN; } ConfigServer::reloadSettings(); @@ -270,7 +276,7 @@ static ExitCode runMongosServer(bool doUpgrade) { web.detach(); } - Status status = getGlobalAuthorizationManager()->initialize(NULL); + status = getGlobalAuthorizationManager()->initialize(NULL); if (!status.isOK()) { error() << "Initializing authorization data failed: " << status; return EXIT_SHARDING_ERROR; |