summaryrefslogtreecommitdiff
path: root/jstests/sharding/explainFind_stale_mongos.js
blob: d4ed29725414ab644d731602e3a249d9ad50e0db (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
/**
 * Tests that a stale mongos does not return a stale shardVersion error to the client for explain
 * find sent using the legacy query mode (it retries on the stale shardVersion error internally).
 */
(function() {
    "use strict";

    const dbName = "test";
    const collName = "foo";
    const ns = dbName + "." + collName;

    const st = new ShardingTest({mongos: 2, shards: 1, verbose: 2});

    let staleMongos = st.s0;
    let freshMongos = st.s1;

    jsTest.log("Make the stale mongos load a cache entry for db " + dbName + " once");
    assert.writeOK(staleMongos.getDB(dbName).getCollection(collName).insert({_id: 1}));

    jsTest.log("Call shardCollection on " + ns + " from the fresh mongos");
    assert.commandWorked(freshMongos.adminCommand({enableSharding: dbName}));
    assert.commandWorked(freshMongos.adminCommand({shardCollection: ns, key: {"_id": 1}}));

    jsTest.log("Ensure the shard knows " + ns + " is sharded");
    assert.commandWorked(
        st.shard0.adminCommand({_flushRoutingTableCacheUpdates: ns, syncFromConfig: true}));

    jsTest.log("Run explain find on " + ns + " from the stale mongos");
    staleMongos.getDB(dbName).getMongo().forceReadMode("legacy");
    staleMongos.getDB(dbName).getCollection(collName).find({$query: {}, $explain: true}).next();

    st.stop();
})();