summaryrefslogtreecommitdiff
path: root/jstests/sharding/refresh_sessions.js
blob: c6d229707ca56126f6812ecba297afb50e9066e4 (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
75
76
77
78
79
80
81
82
83
84
85
86
(function() {
"use strict";

// This test makes assumptions about the number of logical sessions.
TestData.disableImplicitSessions = true;

var sessionsDb = "config";
var refresh = {refreshLogicalSessionCacheNow: 1};
var startSession = {startSession: 1};

// Create a cluster with 1 shard.
var cluster = new ShardingTest({shards: 2});

// Test that we can refresh without any sessions, as a sanity check.
{
    assert.commandWorked(cluster.s.getDB(sessionsDb).runCommand(refresh));
    assert.commandWorked(cluster.shard0.getDB(sessionsDb).runCommand(refresh));
    assert.commandWorked(cluster.shard1.getDB(sessionsDb).runCommand(refresh));
}

// Test that refreshing on mongos flushes local records to the collection.
{
    var mongos = cluster.s.getDB(sessionsDb);
    var sessionCount = mongos.system.sessions.count();

    // Start one session.
    assert.commandWorked(mongos.runCommand(startSession));
    assert.commandWorked(mongos.runCommand(refresh));

    // Test that it landed in the collection.
    assert.eq(mongos.system.sessions.count(),
              sessionCount + 1,
              "refresh on mongos did not flush session record");
}

// Test that refreshing on mongod flushes local records to the collection.
{
    var mongos = cluster.s.getDB(sessionsDb);
    var shard = cluster.shard0.getDB(sessionsDb);
    var sessionCount = mongos.system.sessions.count();

    assert.commandWorked(shard.runCommand(startSession));
    assert.commandWorked(shard.runCommand(refresh));

    // Test that the new record landed in the collection.
    assert.eq(mongos.system.sessions.count(),
              sessionCount + 1,
              "refresh on mongod did not flush session record");
}

// Test that refreshing on all servers flushes all records.
{
    var mongos = cluster.s.getDB(sessionsDb);
    var shard0 = cluster.shard0.getDB(sessionsDb);
    var shard1 = cluster.shard1.getDB(sessionsDb);

    var sessionCount = mongos.system.sessions.count();

    assert.commandWorked(mongos.runCommand(startSession));
    assert.commandWorked(shard0.runCommand(startSession));
    assert.commandWorked(shard1.runCommand(startSession));

    // All records should be in local caches only.
    assert.eq(mongos.system.sessions.count(),
              sessionCount,
              "startSession should not flush records to disk");

    // Refresh on each server, see that it ups the session count.
    assert.commandWorked(mongos.runCommand(refresh));
    assert.eq(mongos.system.sessions.count(),
              sessionCount + 1,
              "refresh on mongos did not flush session records to disk");

    assert.commandWorked(shard0.runCommand(refresh));
    assert.eq(mongos.system.sessions.count(),
              sessionCount + 2,
              "refresh on shard did not flush session records to disk");

    assert.commandWorked(shard1.runCommand(refresh));
    assert.eq(mongos.system.sessions.count(),
              sessionCount + 3,
              "refresh on shard did not flush session records to disk");
}

cluster.stop();
})();