summaryrefslogtreecommitdiff
path: root/jstests/core/txns/read_own_multikey_writes.js
blob: 9af97dc4baae4f32c4d33298c088ecf6d10c79a2 (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
// Tests that multikey updates made inside a transaction are visible to that transaction's reads.
// @tags: [assumes_unsharded_collection, uses_transactions]
(function() {
"use strict";

const dbName = 'test';
const collName = 'testReadOwnMultikeyWrites';
// Use majority write concern to clear the drop-pending that can cause lock conflicts with
// transactions.
db.getSiblingDB(dbName).getCollection(collName).drop({writeConcern: {w: "majority"}});

const session = db.getMongo().startSession({causalConsistency: false});
const sessionDb = session.getDatabase(dbName);
const sessionColl = sessionDb.getCollection(collName);

assert.commandWorked(sessionDb.runCommand({create: collName}));

assert.writeOK(sessionColl.insert({a: 1}));
assert.commandWorked(sessionColl.createIndex({a: 1}));

session.startTransaction();
assert.writeOK(sessionColl.update({}, {$set: {a: [1, 2, 3]}}));
assert.eq(1, sessionColl.find({}, {_id: 0, a: 1}).sort({a: 1}).itcount());
assert.commandWorked(session.commitTransaction_forTesting());

assert.eq(1,
          db.getSiblingDB(dbName)
              .getCollection(collName)
              .find({}, {_id: 0, a: 1})
              .sort({a: 1})
              .itcount());
})();