summaryrefslogtreecommitdiff
path: root/jstests/core/txns/read_own_multikey_writes.js
blob: 69f6f035f3e68752226a92a7894c92cadca1096b (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());
})();