summaryrefslogtreecommitdiff
path: root/jstests/sharding/internal_sessions.js
blob: f51a124890ae2143c4583c609fc8c09284ab4708 (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
/*
 * Tests basic support for internal sessions.
 *
 * @tags: [requires_fcv_51]
 */
(function() {
'use strict';

TestData.disableImplicitSessions = true;

const st = new ShardingTest({shards: 1});
const shard0Primary = st.rs0.getPrimary();

const kDbName = "testDb";
const kCollName = "testColl";
const testDB = st.s.getDB(kDbName);

const kConfigTxnNs = "config.transactions";

assert.commandWorked(st.s.adminCommand({enableSharding: kDbName}));
st.ensurePrimaryShard(kDbName, st.shard0.shardName);

// Verify that parent and child sessions are tracked using different config.transactions documents.
const sessionUUID = UUID();

const lsid0 = {
    id: sessionUUID
};
assert.commandWorked(testDB.runCommand({
    insert: kCollName,
    documents: [{x: 0}],
    ordered: false,
    lsid: lsid0,
    txnNumber: NumberLong(0)
}));
assert.neq(null, shard0Primary.getCollection(kConfigTxnNs).findOne({"_id.id": sessionUUID}));

const lsid1 = {
    id: sessionUUID,
    txnNumber: NumberLong(35),
    stmtId: NumberInt(0)
};
assert.commandWorked(testDB.runCommand({
    insert: kCollName,
    documents: [{x: 1}],
    ordered: false,
    lsid: lsid1,
    txnNumber: NumberLong(0)
}));
assert.neq(null, shard0Primary.getCollection(kConfigTxnNs).findOne({
    "_id.id": sessionUUID,
    "_id.txnNumber": lsid1.txnNumber,
    "_id.stmtId": lsid1.stmtId
}));

const lsid2 = {
    id: sessionUUID,
    txnUUID: UUID()
};
assert.commandWorked(testDB.runCommand({
    insert: kCollName,
    documents: [{x: 2}],
    ordered: false,
    lsid: lsid2,
    txnNumber: NumberLong(35)
}));
assert.neq(null,
           shard0Primary.getCollection(kConfigTxnNs)
               .findOne({"_id.id": sessionUUID, "_id.txnUUID": lsid2.txnUUID}));

assert.eq(3, shard0Primary.getCollection(kConfigTxnNs).count({"_id.id": sessionUUID}));

st.stop();
})();