summaryrefslogtreecommitdiff
path: root/jstests/replsets/refresh_sessions_rs.js
blob: 307915d2faaa203882566d0466e09981eb7939b8 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
(function() {
    "use strict";

    var refresh = {refreshLogicalSessionCacheNow: 1};
    var startSession = {startSession: 1};

    // Start up a replica set.
    var dbName = "config";

    var replTest = new ReplSetTest({name: 'refresh', nodes: 3});
    var nodes = replTest.startSet();

    replTest.initiate();
    var primary = replTest.getPrimary();

    replTest.awaitSecondaryNodes();
    var server2 = replTest._slaves[0];
    var server3 = replTest._slaves[1];

    var db1 = primary.getDB(dbName);
    var db2 = server2.getDB(dbName);
    var db3 = server3.getDB(dbName);

    var res;

    // Trigger an initial refresh on all members, as a sanity check.
    res = db1.runCommand(refresh);
    assert.commandWorked(res, "failed to refresh");
    res = db2.runCommand(refresh);
    assert.commandWorked(res, "failed to refresh");
    res = db3.runCommand(refresh);
    assert.commandWorked(res, "failed to refresh");

    // Connect to the primary and start a session.
    db1.runCommand(startSession);
    assert.commandWorked(res, "unable to start session");

    // That session should not be in db.system.sessions yet.
    assert.eq(db1.system.sessions.count(), 0, "should not have session records yet");

    // Connect to each replica set member and start a session.
    res = db2.runCommand(startSession);
    assert.commandWorked(res, "unable to start session");
    res = db3.runCommand(startSession);
    assert.commandWorked(res, "unable to start session");

    // Connect to a secondary and trigger a refresh.
    res = db2.runCommand(refresh);
    assert.commandWorked(res, "failed to refresh");

    // Connect to the primary. The sessions collection here should not yet contain records.
    assert.eq(db1.system.sessions.count(), 0, "flushed refresh to the primary prematurely");

    // Trigger a refresh on the primary. The sessions collection should now contain two records.
    res = db1.runCommand(refresh);
    assert.commandWorked(res, "failed to refresh");
    assert.eq(
        db1.system.sessions.count(), 2, "should have two local session records after refresh");

    // Trigger another refresh on all members.
    res = db2.runCommand(refresh);
    assert.commandWorked(res, "failed to refresh");
    res = db3.runCommand(refresh);
    assert.commandWorked(res, "failed to refresh");
    res = db1.runCommand(refresh);
    assert.commandWorked(res, "failed to refresh");

    // The sessions collection on the primary should now contain all records.
    assert.eq(
        db1.system.sessions.count(), 3, "should have three local session records after refresh");

    // Stop the test.
    replTest.stopSet();
})();