-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
Networking & Observability
-
N&O Prioritized List
-
None
-
3
-
TBD
-
None
-
None
-
None
-
None
-
None
-
None
-
0
When we pre-warm connections here, we get a single arbitrary executor from the sharding task executor pool and run a multicast ping to all hosts from that single arbitrary executor. This warms the connection pools for that executor. However, other executors' connection pools are not affected.
On linux today, we only support a single sharding task executor, but on other platforms (and on linux post-SERVER-102477) we do/will support configuring multiple executors.
Interestingly, when connection pre-warming was introduced, we did support configuring multiple sharding task executors, so this was more of a bug then.
After some more investigation, it seems the bug may be slightly worse - it appears to not pre-warm any connections. I ran the below js (python buildscripts/resmoke.py run test.js) and looking at the jsTestLog'd connPoolStats, I expect to see at least one pool like NetworkInterfaceTL-TaskExecutorPool-0 in the output, but I don't. It looks like none of the pools are getting pre-warmed. Debugging a bit, it's because allShards here is an empty vector, so no pings get sent out at all. It turns out that it does pre-warm a single executor's connection pool if sharding has been enabled in the cluster and it has at least one sharded collection (which we can see in warm_up_connection_pool.js). Nonetheless, it still only warms up a single task executor's connection pool rather than all of the arbitrary executors due to having just picked one of the executors here.
import {ShardingTest} from "jstests/libs/shardingtest.js"; const st = new ShardingTest({ shards: 3, mongos: [{ setParameter: { taskExecutorPoolSize: 16, ShardingTaskExecutorPoolMinSize: 3, warmMinConnectionsInShardingTaskExecutorPoolOnStartup: true, warmMinConnectionsInShardingTaskExecutorPoolOnStartupWaitMS: 5000, } }], rs: { nodes: 3, }, }); let result = assert.commandWorked(st.s.adminCommand({connPoolStats: 1})); jsTestLog("connPoolStats: " + tojson(result)); st.stop();
- is related to
-
SERVER-102477 Revert change preventing tuning taskExecutorPoolSize on 7.0+
-
- Closed
-