summaryrefslogtreecommitdiff
path: root/src/mongo/s/server.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2017-07-24 17:48:20 -0400
committerKaloian Manassiev <kaloian.manassiev@mongodb.com>2017-07-28 16:32:57 -0400
commit356a36dea183db5afedb932ed4c086f17c4173d0 (patch)
tree59128eb8d15f8ed2e0b7c0bc0d2596c756859d23 /src/mongo/s/server.cpp
parent2a910e6c65327a71f6656ecacf6fbca66baeb517 (diff)
downloadmongo-356a36dea183db5afedb932ed4c086f17c4173d0.tar.gz
SERVER-29672 Make Config/ShardCatalogCacheLoader decorations on ServiceContext
Diffstat (limited to 'src/mongo/s/server.cpp')
-rw-r--r--src/mongo/s/server.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/mongo/s/server.cpp b/src/mongo/s/server.cpp
index 5e9235d8485..f388d1bf493 100644
--- a/src/mongo/s/server.cpp
+++ b/src/mongo/s/server.cpp
@@ -75,6 +75,7 @@
#include "mongo/s/client/shard_registry.h"
#include "mongo/s/client/shard_remote.h"
#include "mongo/s/client/sharding_connection_hook.h"
+#include "mongo/s/config_server_catalog_cache_loader.h"
#include "mongo/s/grid.h"
#include "mongo/s/is_mongos.h"
#include "mongo/s/mongos_options.h"
@@ -158,8 +159,9 @@ static void cleanupTask() {
}
}
- // Validator shutdown must be called after setKillAllOperations is called. Otherwise, this
- // can deadlock.
+ // Perform all shutdown operations after setKillAllOperations is called in order to ensure
+ // that any pending threads are about to terminate
+
if (auto validator = LogicalTimeValidator::get(serviceContext)) {
validator->shutDown();
}
@@ -167,9 +169,11 @@ static void cleanupTask() {
if (auto cursorManager = Grid::get(opCtx)->getCursorManager()) {
cursorManager->shutdown();
}
+
if (auto pool = Grid::get(opCtx)->getExecutorPool()) {
pool->shutdownAndJoin();
}
+
if (auto catalog = Grid::get(opCtx)->catalogClient()) {
catalog->shutDown(opCtx);
}
@@ -209,12 +213,15 @@ static Status initializeSharding(OperationContext* opCtx) {
auto shardFactory =
stdx::make_unique<ShardFactory>(std::move(buildersMap), std::move(targeterFactory));
+ CatalogCacheLoader::set(opCtx->getServiceContext(),
+ stdx::make_unique<ConfigServerCatalogCacheLoader>());
+
Status status = initializeGlobalShardingState(
opCtx,
mongosGlobalParams.configdbs,
generateDistLockProcessId(opCtx),
std::move(shardFactory),
- stdx::make_unique<CatalogCache>(),
+ stdx::make_unique<CatalogCache>(CatalogCacheLoader::get(opCtx)),
[opCtx]() {
auto hookList = stdx::make_unique<rpc::EgressMetadataHookList>();
hookList->addHook(
@@ -453,6 +460,7 @@ static ExitCode initService() {
#endif
namespace {
+
std::unique_ptr<AuthzManagerExternalState> createAuthzManagerExternalStateMongos() {
return stdx::make_unique<AuthzManagerExternalStateMongos>();
}