diff options
author | Jason Carey <jcarey@argv.me> | 2017-11-07 11:11:41 -0500 |
---|---|---|
committer | Jason Carey <jcarey@argv.me> | 2017-11-07 17:45:07 -0500 |
commit | a40f9d9722555f53b390202f0dad508d6b7125d7 (patch) | |
tree | d2074e284037083a90c2a0cf4f72a245648eef55 /src/mongo/s/sharding_initialization.cpp | |
parent | c3e174cab7b8e4a19772746942c7e68daa53bc5e (diff) | |
download | mongo-a40f9d9722555f53b390202f0dad508d6b7125d7.tar.gz |
SERVER-31723 limit mongod sharding exec pool to 1
The mongod sharding task executor pool (for arbitrary tasks) isn't
needed for user operations. As such, it should be limited to 1 pool,
rather than wasteful default (4 <= NCORES <= 64).
Diffstat (limited to 'src/mongo/s/sharding_initialization.cpp')
-rw-r--r-- | src/mongo/s/sharding_initialization.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/mongo/s/sharding_initialization.cpp b/src/mongo/s/sharding_initialization.cpp index 22c1fbfbef1..0ae318e1e9b 100644 --- a/src/mongo/s/sharding_initialization.cpp +++ b/src/mongo/s/sharding_initialization.cpp @@ -124,10 +124,13 @@ std::unique_ptr<ShardingCatalogClient> makeCatalogClient(ServiceContext* service std::unique_ptr<TaskExecutorPool> makeShardingTaskExecutorPool( std::unique_ptr<NetworkInterface> fixedNet, rpc::ShardingEgressMetadataHookBuilder metadataHookBuilder, - ConnectionPool::Options connPoolOptions) { + ConnectionPool::Options connPoolOptions, + boost::optional<size_t> taskExecutorPoolSize) { std::vector<std::unique_ptr<executor::TaskExecutor>> executors; - for (size_t i = 0; i < TaskExecutorPool::getSuggestedPoolSize(); ++i) { + const auto poolSize = taskExecutorPoolSize.value_or(TaskExecutorPool::getSuggestedPoolSize()); + + for (size_t i = 0; i < poolSize; ++i) { auto exec = makeShardingTaskExecutor(executor::makeNetworkInterface( "NetworkInterfaceASIO-TaskExecutorPool-" + std::to_string(i), stdx::make_unique<ShardingNetworkConnectionHook>(), @@ -171,7 +174,8 @@ Status initializeGlobalShardingState(OperationContext* opCtx, StringData distLockProcessId, std::unique_ptr<ShardFactory> shardFactory, std::unique_ptr<CatalogCache> catalogCache, - rpc::ShardingEgressMetadataHookBuilder hookBuilder) { + rpc::ShardingEgressMetadataHookBuilder hookBuilder, + boost::optional<size_t> taskExecutorPoolSize) { if (configCS.type() == ConnectionString::INVALID) { return {ErrorCodes::BadValue, "Unrecognized connection string."}; } @@ -221,8 +225,8 @@ Status initializeGlobalShardingState(OperationContext* opCtx, hookBuilder(), connPoolOptions); auto networkPtr = network.get(); - auto executorPool = - makeShardingTaskExecutorPool(std::move(network), hookBuilder, connPoolOptions); + auto executorPool = makeShardingTaskExecutorPool( + std::move(network), hookBuilder, connPoolOptions, taskExecutorPoolSize); executorPool->startup(); auto const grid = Grid::get(opCtx); |