{ "description": "snapshot-sessions", "schemaVersion": "1.0", "runOnRequirements": [ { "minServerVersion": "5.0", "topologies": [ "replicaset", "sharded-replicaset" ] } ], "createEntities": [ { "client": { "id": "client0", "observeEvents": [ "commandStartedEvent" ], "ignoreCommandMonitoringEvents": [ "findAndModify", "insert", "update" ] } }, { "database": { "id": "database0", "client": "client0", "databaseName": "database0" } }, { "collection": { "id": "collection0", "database": "database0", "collectionName": "collection0", "collectionOptions": { "writeConcern": { "w": "majority" } } } }, { "session": { "id": "session0", "client": "client0", "sessionOptions": { "snapshot": true } } }, { "session": { "id": "session1", "client": "client0", "sessionOptions": { "snapshot": true } } } ], "initialData": [ { "collectionName": "collection0", "databaseName": "database0", "documents": [ { "_id": 1, "x": 11 }, { "_id": 2, "x": 11 } ] } ], "tests": [ { "description": "Find operation with snapshot", "operations": [ { "name": "find", "object": "collection0", "arguments": { "session": "session0", "filter": { "_id": 1 } }, "expectResult": [ { "_id": 1, "x": 11 } ] }, { "name": "findOneAndUpdate", "object": "collection0", "arguments": { "filter": { "_id": 1 }, "update": { "$inc": { "x": 1 } }, "returnDocument": "After" }, "expectResult": { "_id": 1, "x": 12 } }, { "name": "find", "object": "collection0", "arguments": { "session": "session1", "filter": { "_id": 1 } }, "expectResult": [ { "_id": 1, "x": 12 } ] }, { "name": "findOneAndUpdate", "object": "collection0", "arguments": { "filter": { "_id": 1 }, "update": { "$inc": { "x": 1 } }, "returnDocument": "After" }, "expectResult": { "_id": 1, "x": 13 } }, { "name": "find", "object": "collection0", "arguments": { "filter": { "_id": 1 } }, "expectResult": [ { "_id": 1, "x": 13 } ] }, { "name": "find", "object": "collection0", "arguments": { "session": "session0", "filter": { "_id": 1 } }, "expectResult": [ { "_id": 1, "x": 11 } ] }, { "name": "find", "object": "collection0", "arguments": { "session": "session1", "filter": { "_id": 1 } }, "expectResult": [ { "_id": 1, "x": 12 } ] } ], "expectEvents": [ { "client": "client0", "events": [ { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "$$exists": false } } } }, { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } }, { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } } ] } ] }, { "description": "Distinct operation with snapshot", "operations": [ { "name": "distinct", "object": "collection0", "arguments": { "fieldName": "x", "filter": {}, "session": "session0" }, "expectResult": [ 11 ] }, { "name": "findOneAndUpdate", "object": "collection0", "arguments": { "filter": { "_id": 2 }, "update": { "$inc": { "x": 1 } }, "returnDocument": "After" }, "expectResult": { "_id": 2, "x": 12 } }, { "name": "distinct", "object": "collection0", "arguments": { "fieldName": "x", "filter": {}, "session": "session1" }, "expectResult": [ 11, 12 ] }, { "name": "findOneAndUpdate", "object": "collection0", "arguments": { "filter": { "_id": 2 }, "update": { "$inc": { "x": 1 } }, "returnDocument": "After" }, "expectResult": { "_id": 2, "x": 13 } }, { "name": "distinct", "object": "collection0", "arguments": { "fieldName": "x", "filter": {} }, "expectResult": [ 11, 13 ] }, { "name": "distinct", "object": "collection0", "arguments": { "fieldName": "x", "filter": {}, "session": "session0" }, "expectResult": [ 11 ] }, { "name": "distinct", "object": "collection0", "arguments": { "fieldName": "x", "filter": {}, "session": "session1" }, "expectResult": [ 11, 12 ] } ], "expectEvents": [ { "client": "client0", "events": [ { "commandStartedEvent": { "command": { "distinct": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "distinct": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "distinct": "collection0", "readConcern": { "$$exists": false } } } }, { "commandStartedEvent": { "command": { "distinct": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } }, { "commandStartedEvent": { "command": { "distinct": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } } ] } ] }, { "description": "Aggregate operation with snapshot", "operations": [ { "name": "aggregate", "object": "collection0", "arguments": { "pipeline": [ { "$match": { "_id": 1 } } ], "session": "session0" }, "expectResult": [ { "_id": 1, "x": 11 } ] }, { "name": "findOneAndUpdate", "object": "collection0", "arguments": { "filter": { "_id": 1 }, "update": { "$inc": { "x": 1 } }, "returnDocument": "After" }, "expectResult": { "_id": 1, "x": 12 } }, { "name": "aggregate", "object": "collection0", "arguments": { "pipeline": [ { "$match": { "_id": 1 } } ], "session": "session1" }, "expectResult": [ { "_id": 1, "x": 12 } ] }, { "name": "findOneAndUpdate", "object": "collection0", "arguments": { "filter": { "_id": 1 }, "update": { "$inc": { "x": 1 } }, "returnDocument": "After" }, "expectResult": { "_id": 1, "x": 13 } }, { "name": "aggregate", "object": "collection0", "arguments": { "pipeline": [ { "$match": { "_id": 1 } } ] }, "expectResult": [ { "_id": 1, "x": 13 } ] }, { "name": "aggregate", "object": "collection0", "arguments": { "pipeline": [ { "$match": { "_id": 1 } } ], "session": "session0" }, "expectResult": [ { "_id": 1, "x": 11 } ] }, { "name": "aggregate", "object": "collection0", "arguments": { "pipeline": [ { "$match": { "_id": 1 } } ], "session": "session1" }, "expectResult": [ { "_id": 1, "x": 12 } ] } ], "expectEvents": [ { "client": "client0", "events": [ { "commandStartedEvent": { "command": { "aggregate": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "aggregate": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "aggregate": "collection0", "readConcern": { "$$exists": false } } } }, { "commandStartedEvent": { "command": { "aggregate": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } }, { "commandStartedEvent": { "command": { "aggregate": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } } ] } ] }, { "description": "countDocuments operation with snapshot", "operations": [ { "name": "countDocuments", "object": "collection0", "arguments": { "filter": {}, "session": "session0" }, "expectResult": 2 }, { "name": "countDocuments", "object": "collection0", "arguments": { "filter": {}, "session": "session0" }, "expectResult": 2 } ], "expectEvents": [ { "client": "client0", "events": [ { "commandStartedEvent": { "command": { "aggregate": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "aggregate": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } } ] } ] }, { "description": "Mixed operation with snapshot", "operations": [ { "name": "find", "object": "collection0", "arguments": { "session": "session0", "filter": { "_id": 1 } }, "expectResult": [ { "_id": 1, "x": 11 } ] }, { "name": "findOneAndUpdate", "object": "collection0", "arguments": { "filter": { "_id": 1 }, "update": { "$inc": { "x": 1 } }, "returnDocument": "After" }, "expectResult": { "_id": 1, "x": 12 } }, { "name": "find", "object": "collection0", "arguments": { "filter": { "_id": 1 } }, "expectResult": [ { "_id": 1, "x": 12 } ] }, { "name": "aggregate", "object": "collection0", "arguments": { "pipeline": [ { "$match": { "_id": 1 } } ], "session": "session0" }, "expectResult": [ { "_id": 1, "x": 11 } ] }, { "name": "distinct", "object": "collection0", "arguments": { "fieldName": "x", "filter": {}, "session": "session0" }, "expectResult": [ 11 ] } ], "expectEvents": [ { "client": "client0", "events": [ { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "$$exists": false } } } }, { "commandStartedEvent": { "command": { "aggregate": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } }, { "commandStartedEvent": { "command": { "distinct": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } } ] } ] }, { "description": "Write commands with snapshot session do not affect snapshot reads", "operations": [ { "name": "find", "object": "collection0", "arguments": { "filter": {}, "session": "session0" } }, { "name": "insertOne", "object": "collection0", "arguments": { "document": { "_id": 22, "x": 33 } } }, { "name": "updateOne", "object": "collection0", "arguments": { "filter": { "_id": 1 }, "update": { "$inc": { "x": 1 } } } }, { "name": "find", "object": "collection0", "arguments": { "filter": { "_id": 1 }, "session": "session0" }, "expectResult": [ { "_id": 1, "x": 11 } ] } ], "expectEvents": [ { "client": "client0", "events": [ { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } } } }, { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": true } } } } } ] } ] }, { "description": "First snapshot read does not send atClusterTime", "operations": [ { "name": "find", "object": "collection0", "arguments": { "filter": {}, "session": "session0" } } ], "expectEvents": [ { "client": "client0", "events": [ { "commandStartedEvent": { "command": { "find": "collection0", "readConcern": { "level": "snapshot", "atClusterTime": { "$$exists": false } } }, "commandName": "find", "databaseName": "database0" } } ] } ] }, { "description": "StartTransaction fails in snapshot session", "operations": [ { "name": "startTransaction", "object": "session0", "expectError": { "isError": true, "isClientError": true, "errorContains": "Transactions are not supported in snapshot sessions" } } ] } ] }