summaryrefslogtreecommitdiff
path: root/src/mongo/s/sharding_initialization.cpp
diff options
context:
space:
mode:
authorJason Carey <jcarey@argv.me>2017-11-07 11:11:41 -0500
committerJason Carey <jcarey@argv.me>2017-11-07 17:45:07 -0500
commita40f9d9722555f53b390202f0dad508d6b7125d7 (patch)
treed2074e284037083a90c2a0cf4f72a245648eef55 /src/mongo/s/sharding_initialization.cpp
parentc3e174cab7b8e4a19772746942c7e68daa53bc5e (diff)
downloadmongo-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.cpp14
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);