summaryrefslogtreecommitdiff
path: root/jstests/sharding/lagged_config_secondary.js
blob: a2756ad7e70269afc97f6b954e75b552367c0a01 (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
46
47
48
49
50
51
52
/**
 * Test that mongos times out when the config server replica set only contains nodes that
 * are behind the majority opTime.
 */
(function(){
var st = new ShardingTest({ shards: 1 });

var configSecondaryList = st.configRS.getSecondaries();
var configSecondaryToKill = configSecondaryList[0];
var delayedConfigSecondary = configSecondaryList[1];

delayedConfigSecondary.getDB('admin').adminCommand({ configureFailPoint: 'rsSyncApplyStop',
                                                     mode: 'alwaysOn' });

var testDB = st.s.getDB('test');
testDB.adminCommand({ enableSharding: 'test' });
testDB.adminCommand({ shardCollection: 'test.user', key: { _id: 1 }});

testDB.user.insert({ _id: 1 });

st.configRS.stopMaster();
MongoRunner.stopMongod(configSecondaryToKill.port);

// Clears all cached info so mongos will be forced to query from the config.
st.s.adminCommand({ flushRouterConfig: 1 });

var exception = assert.throws(function() {
    testDB.user.findOne();
});

assert.eq(ErrorCodes.ExceededTimeLimit, exception.code);

var msg = 'Command on database config timed out waiting for read concern to be satisfied.';
assert.soon(
    function() {
        var logMessages =
            assert.commandWorked(delayedConfigSecondary.adminCommand({getLog: 'global'})).log;
        for (var i = 0; i < logMessages.length; i++) {
            if (logMessages[i].indexOf(msg) != -1) {
                return true;
            }
        }
        return false;
    },
    'Did not see any log entries containing the following message: ' + msg,
    60000,
    300
);

st.stop();

}());