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();
})();
|