summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/max_conns_override.js
blob: 5fa288048564e0f6e2b1ac11f5aeb38d0252557a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
(function() {
    'use strict';
    const configuredMaxConns = 5;
    const configuredReadyAdminThreads = 3;
    let conn = MongoRunner.runMongod({
        config: "jstests/noPassthrough/libs/max_conns_override_config.yaml",
        // We check a specific field in this executor's serverStatus section
        serviceExecutor: "synchronous",
    });

    // Use up all the maxConns with junk connections, all of these should succeed
    let maxConns = [];
    for (let i = 0; i < 5; i++) {
        maxConns.push(new Mongo(`127.0.0.1:${conn.port}`));
        let tmpDb = maxConns[maxConns.length - 1].getDB("admin");
        assert.commandWorked(tmpDb.runCommand({isMaster: 1}));
    }

    // Get serverStatus to check that we have the right number of threads in the right places
    let status = conn.getDB("admin").runCommand({serverStatus: 1});
    const connectionsStatus = status["connections"];
    const reservedExecutorStatus = connectionsStatus["adminConnections"];
    const normalExecutorStatus = status["network"]["serviceExecutorTaskStats"];

    // Log these serverStatus sections so we can debug this easily
    print("connections status section: ", tojson(connectionsStatus));
    print("normal executor status section: ", tojson(normalExecutorStatus));

    // The number of "available" connections should be less than zero, because we've used
    // all of maxConns. We're over the limit!
    assert.lt(connectionsStatus["available"], 0);
    // The number of "current" connections should be greater than maxConns
    assert.gt(connectionsStatus["current"], configuredMaxConns);
    // The number of ready threads should be the number of readyThreads we configured, since
    // every thread spawns a new thread on startup
    assert.eq(reservedExecutorStatus["readyThreads"] + reservedExecutorStatus["startingThreads"],
              configuredReadyAdminThreads);
    // The number of running admin threads should be greater than the readyThreads, because
    // one is being used right now
    assert.gt(reservedExecutorStatus["threadsRunning"], reservedExecutorStatus["readyThreads"]);
    // The normal serviceExecutor should only be running maxConns number of threads
    assert.eq(normalExecutorStatus["threadsRunning"], configuredMaxConns);

    MongoRunner.stopMongod(conn);
})();